@inseefr/lunatic 2.5.0-fast-forward → 2.5.1-beta
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/README.md +26 -26
- package/lib/components/commons/components/combo-box/combo-box.js +2 -2
- package/lib/components/commons/components/{default-option-renderer.js → combo-box/panel/combo-box-option.js} +3 -2
- package/lib/components/commons/components/{default-option-renderer.spec.js → combo-box/panel/combo-box-option.spec.js} +5 -5
- package/lib/components/commons/components/combo-box/panel/panel.js +4 -4
- package/lib/components/commons/components/combo-box/selection/LabelOrInput.js +51 -0
- package/lib/components/commons/components/combo-box/selection/LabelOrInput.spec.js +23 -0
- package/lib/components/commons/components/combo-box/selection/__snapshots__/selection.spec.tsx.snap +14 -12
- package/lib/components/commons/components/combo-box/selection/{delete.js → clear-button.js} +6 -3
- package/lib/components/commons/components/combo-box/selection/{delete.spec.js → clear-button.spec.js} +9 -9
- package/lib/components/commons/components/combo-box/selection/combo-box-label-selection.js +47 -0
- package/lib/components/commons/components/{default-label-renderer.spec.js → combo-box/selection/combo-box-label-selection.spec.js} +4 -4
- package/lib/components/commons/components/combo-box/selection/input.js +2 -2
- package/lib/components/commons/components/combo-box/selection/label-selection.js +8 -12
- package/lib/components/commons/components/combo-box/selection/label-selection.spec.js +3 -11
- package/lib/components/commons/components/combo-box/selection/selection.js +5 -11
- package/lib/components/commons/components/combo-box/selection/selection.spec.js +5 -30
- package/lib/components/commons/index.js +1 -12
- package/lib/components/duration/duration.js +52 -0
- package/lib/components/duration/duration.scss +17 -0
- package/lib/components/duration/durationInput.js +72 -0
- package/lib/components/duration/durationUtils.js +31 -0
- package/lib/components/duration/formatDuration.js +28 -0
- package/lib/components/duration/formatDuration.spec.js +38 -0
- package/lib/components/duration/getDurationFromValue.js +64 -0
- package/lib/components/duration/index.js +13 -0
- package/lib/components/index.js +7 -0
- package/lib/components/loop/block-for-loop/block-for-loop.js +5 -7
- package/lib/components/modal-controls/modal-controls.js +3 -5
- package/lib/components/suggester/html/suggester.js +2 -4
- package/lib/components/table/table-orchestrator.js +0 -1
- package/lib/src/components/commons/components/combo-box/combo-box.d.ts +3 -3
- package/lib/src/components/commons/components/combo-box/combo-box.stories.d.ts +3 -3
- package/lib/src/components/commons/components/combo-box/combo-box.type.d.ts +1 -1
- package/lib/src/components/commons/components/combo-box/panel/combo-box-option.d.ts +8 -0
- package/lib/src/components/commons/components/combo-box/panel/panel.d.ts +7 -4
- package/lib/src/components/commons/components/combo-box/selection/LabelOrInput.d.ts +16 -0
- package/lib/src/components/commons/components/combo-box/selection/clear-button.d.ts +9 -0
- package/lib/src/components/commons/components/combo-box/selection/combo-box-label-selection.d.ts +10 -0
- package/lib/src/components/commons/components/combo-box/selection/input.d.ts +9 -4
- package/lib/src/components/commons/components/combo-box/selection/label-selection.d.ts +9 -9
- package/lib/src/components/commons/components/combo-box/state-management/actions.d.ts +5 -5
- package/lib/src/components/commons/index.d.ts +0 -3
- package/lib/src/components/dropdown/html/dropdown-simple/simple-label-renderer.d.ts +2 -2
- package/lib/src/components/dropdown/html/dropdown-simple/simple-option-renderer.d.ts +2 -2
- package/lib/src/components/dropdown/html/dropdown-writable/dropdown-writable.d.ts +2 -2
- package/lib/src/components/dropdown/html/dropdown-writable/writable-label-renderer.d.ts +2 -2
- package/lib/src/components/dropdown/html/dropdown-writable/writable-option-renderer.d.ts +2 -2
- package/lib/src/components/duration/duration.d.ts +4 -0
- package/lib/src/components/duration/durationInput.d.ts +7 -0
- package/lib/src/components/duration/durationUtils.d.ts +30 -0
- package/lib/src/components/duration/formatDuration.d.ts +2 -0
- package/lib/src/components/duration/formatDuration.spec.d.ts +1 -0
- package/lib/src/components/duration/getDurationFromValue.d.ts +8 -0
- package/lib/src/components/duration/index.d.ts +1 -0
- package/lib/src/components/index.d.ts +1 -0
- package/lib/src/components/loop/block-for-loop/block-for-loop-ochestrator.d.ts +1 -1
- package/lib/src/components/loop/block-for-loop/block-for-loop.d.ts +3 -3
- package/lib/src/components/loop/roster-for-loop/roster-for-loop-orchestrator.d.ts +1 -1
- package/lib/src/components/modal-controls/modal-controls.d.ts +1 -1
- package/lib/src/components/suggester/html/suggester.d.ts +2 -2
- package/lib/src/components/suggester/searching/create-searching.d.ts +2 -2
- package/lib/src/components/table/table-orchestrator.d.ts +1 -1
- package/lib/src/components/type.d.ts +7 -0
- package/lib/src/i18n/index.d.ts +2 -2
- package/lib/src/i18n/inputNumberProps.d.ts +1 -1
- package/lib/src/use-lunatic/actions.d.ts +2 -2
- package/lib/src/use-lunatic/commons/index.d.ts +6 -7
- package/lib/src/use-lunatic/reducer/reduce-on-init.spec.d.ts +1 -0
- package/lib/src/use-lunatic/use-lunatic.d.ts +12 -0
- package/lib/src/utils/object.d.ts +1 -0
- package/lib/{components/commons/components/combo-box/selection/displayLabelOrInput.js → stories/duration/duration.stories.js} +29 -14
- package/lib/stories/duration/source.json +32 -0
- package/lib/stories/duration/source1.json +32 -0
- package/lib/use-lunatic/commons/execute-expression/create-refresh-calculated.spec.js +2 -0
- package/lib/use-lunatic/commons/index.js +6 -13
- package/lib/use-lunatic/reducer/reduce-on-init.js +3 -3
- package/lib/use-lunatic/reducer/reduce-on-init.spec.js +17 -0
- package/lib/use-lunatic/use-lunatic.js +1 -2
- package/lib/utils/object.js +6 -0
- package/package.json +1 -1
- package/lib/components/commons/components/combo-box/selection/displayLabelOrInput.spec.js +0 -56
- package/lib/components/commons/components/default-label-renderer.js +0 -37
- package/lib/src/components/commons/components/combo-box/selection/delete.d.ts +0 -8
- package/lib/src/components/commons/components/combo-box/selection/displayLabelOrInput.d.ts +0 -5
- package/lib/src/components/commons/components/default-label-renderer.d.ts +0 -8
- package/lib/src/components/commons/components/default-option-renderer.d.ts +0 -7
- package/lib/src/utils/store-tools/auto-load.d.ts +0 -6
- package/lib/use-lunatic/commons/load-suggesters.js +0 -158
- package/lib/utils/store-tools/auto-load.js +0 -162
- /package/lib/src/components/commons/components/combo-box/{selection/delete.spec.d.ts → panel/combo-box-option.spec.d.ts} +0 -0
- /package/lib/src/components/commons/components/combo-box/selection/{displayLabelOrInput.spec.d.ts → LabelOrInput.spec.d.ts} +0 -0
- /package/lib/src/components/commons/components/{default-label-renderer.spec.d.ts → combo-box/selection/clear-button.spec.d.ts} +0 -0
- /package/lib/src/components/commons/components/{default-option-renderer.spec.d.ts → combo-box/selection/combo-box-label-selection.spec.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# Lunatic
|
|
4
4
|
|
|
5
|
-
[](https://github.com/InseeFr/Lunatic/actions/workflows/quality.yml)
|
|
6
6
|
[](https://badge.fury.io/js/%40inseefr%2Flunatic)
|
|
7
7
|
[](https://sonarcloud.io/dashboard?id=InseeFr_Lunatic)
|
|
8
8
|
[](https://sonarcloud.io/dashboard?id=InseeFr_Lunatic)
|
|
@@ -10,37 +10,36 @@
|
|
|
10
10
|
|
|
11
11
|
Lunatic est une librairie front-end sous forme de hook react et de librairies de composants pour générer un questionnaire à partir du format de données [Lunatic-Model](https://github.com/InseeFr/Lunatic-Model).
|
|
12
12
|
|
|
13
|
-
- [Storybook
|
|
14
|
-
- [Storybook v1](https://inseefr.github.io/Lunatic/storybook-v1)
|
|
15
|
-
- [Storybook Beta](https://inseefr.github.io/Lunatic/storybook-beta)
|
|
16
|
-
- [Editeur Lunatic](https://inseefr.github.io/Lunatic/editor/)
|
|
13
|
+
- [Storybook](https://inseefr.github.io/Lunatic/storybook), branche `main`
|
|
14
|
+
- [Storybook v1](https://inseefr.github.io/Lunatic/storybook-v1), branche `v1-main`
|
|
15
|
+
- [Storybook Beta](https://inseefr.github.io/Lunatic/storybook-beta), branche `develop`
|
|
17
16
|
- [Documentation](https://inseefr.github.io/Lunatic/fr/)
|
|
18
17
|
|
|
19
18
|
## Sommaire
|
|
20
19
|
|
|
21
20
|
- [Lunatic](#lunatic)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
- [Sommaire](#sommaire)
|
|
22
|
+
- [Utilisation](#utilisation)
|
|
23
|
+
- [Le hook useLunatic](#le-hook-uselunatic)
|
|
24
|
+
- [Les composants](#les-composants)
|
|
25
|
+
- [Personnalisation](#personnalisation)
|
|
26
|
+
- [Fonctionnement interne](#fonctionnement-interne)
|
|
27
|
+
- [Fonctionnement général](#fonctionnement-général)
|
|
28
|
+
- [pages et pager](#pages-et-pager)
|
|
29
|
+
- [Exécution du VTL](#exécution-du-vtl)
|
|
30
|
+
- [Convention et bonnes pratiques](#convention-et-bonnes-pratiques)
|
|
32
31
|
|
|
33
32
|
## Utilisation
|
|
34
33
|
|
|
35
34
|
Pour commencer il faut installer lunatic
|
|
36
35
|
|
|
37
36
|
```bash
|
|
38
|
-
yarn add @inseefr/lunatic@2.0
|
|
37
|
+
yarn add @inseefr/lunatic@2.5.0
|
|
39
38
|
```
|
|
40
39
|
|
|
41
40
|
### Le hook useLunatic
|
|
42
41
|
|
|
43
|
-
Ensuite, à l'endroit où vous souhaitez afficher le formulaire il faudra utiliser le hook `useLunatic`.
|
|
42
|
+
Ensuite, à l'endroit où vous souhaitez afficher le formulaire il faudra utiliser le hook `useLunatic`.
|
|
44
43
|
|
|
45
44
|
```js
|
|
46
45
|
import { useLunatic } from '@inseefr/lunatic';
|
|
@@ -56,8 +55,9 @@ Ce hook prend 3 paramètres :
|
|
|
56
55
|
- **features** (défaut `['VTL', 'MD']`), permet de définir les fonctionnalité supportées
|
|
57
56
|
- **preferences** (défaut `['COLLECTED']`)
|
|
58
57
|
- **onChange** (défaut `() => {}`), permet d'ajouter une logique à appliquer lorsqu'une réponse est modifiée (doit être mémoïsé car est utilisé comme dépendance d'un useCallback en interne)
|
|
59
|
-
- **management** (défaut `false`)
|
|
58
|
+
- **management** (défaut `false`) : Non implémenté encore, permettra de gérer plusieurs état d'une même variable (utilisation par des postes de reprise)
|
|
60
59
|
- **initialPage** (défaut `'1'`), permet de définir la page de départ
|
|
60
|
+
- **lastReachedPage** (défaut `undefined`) permet de définir quelle est la page la plus lointaine déjà atteinte
|
|
61
61
|
- **autoSuggesterLoading** (défaut `false`)
|
|
62
62
|
- **suggesters**
|
|
63
63
|
- **suggesterFetcher** (défaut `fetch`), méthode utilisée pour récupérer les données du suggester
|
|
@@ -68,7 +68,7 @@ Et retourne un objet permettant de piloter le questionnaire :
|
|
|
68
68
|
- `getComponents()`, renvoie les composants à afficher pour la page courante
|
|
69
69
|
- `goPreviousPage()`, permet d'aller à la page précédente
|
|
70
70
|
- `goNextPage()`, permet d'aller à la page suivante
|
|
71
|
-
- `goToPage(page: string)`, permet d'aller à une page arbitraire
|
|
71
|
+
- `goToPage({ page: string })`, permet d'aller à une page arbitraire
|
|
72
72
|
- `getErrors()`, renvoie les erreurs
|
|
73
73
|
- `getModalErrors()`, renvoie les erreurs dans les modales
|
|
74
74
|
- `getCurrentErrors()`, renvoie les erreurs de la page courante
|
|
@@ -120,14 +120,14 @@ Par défaut les composants offerts par Lunatic sont plutôt simples avec un styl
|
|
|
120
120
|
|
|
121
121
|
```jsx
|
|
122
122
|
const custom = {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
123
|
+
Input: MyCustomInput,
|
|
124
|
+
InputNumber: MyCustomInputNumber,
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
function App({ source, data }) {
|
|
128
|
+
const {} = useLunatic(source, data, { custom });
|
|
126
129
|
|
|
127
|
-
|
|
128
|
-
const {} = useLunatic(source, data, {custom})
|
|
129
|
-
|
|
130
|
-
// ...
|
|
130
|
+
// ...
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
-
var
|
|
10
|
+
var _clearButton = require("./selection/clear-button");
|
|
11
11
|
var _stateManagement = require("./state-management");
|
|
12
12
|
require("./combo-box.scss");
|
|
13
13
|
var _selection = require("./selection/selection");
|
|
@@ -140,7 +140,7 @@ function ComboBox(_ref) {
|
|
|
140
140
|
search: search,
|
|
141
141
|
onSelect: handleSelect
|
|
142
142
|
})]
|
|
143
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
143
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
144
144
|
className: (0, _classnames["default"])({
|
|
145
145
|
focused: focused
|
|
146
146
|
}),
|
|
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
7
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
8
|
+
var _createCustomizableField = _interopRequireDefault(require("../../../create-customizable-field"));
|
|
8
9
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
9
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
10
|
-
function
|
|
11
|
+
function ComboBoxOption(_ref) {
|
|
11
12
|
var option = _ref.option,
|
|
12
13
|
selected = _ref.selected;
|
|
13
14
|
var id = option.id,
|
|
@@ -39,5 +40,5 @@ function DefaultOptionRenderer(_ref) {
|
|
|
39
40
|
})
|
|
40
41
|
});
|
|
41
42
|
}
|
|
42
|
-
var _default =
|
|
43
|
+
var _default = (0, _createCustomizableField["default"])(ComboBoxOption, 'ComboboxOption');
|
|
43
44
|
exports["default"] = _default;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _react = _interopRequireDefault(require("react"));
|
|
4
4
|
var _react2 = require("@testing-library/react");
|
|
5
|
-
var
|
|
5
|
+
var _comboBoxOption = _interopRequireDefault(require("./combo-box-option"));
|
|
6
6
|
var _vitest = require("vitest");
|
|
7
7
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
@@ -12,7 +12,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
12
12
|
id: '1',
|
|
13
13
|
value: 'Value'
|
|
14
14
|
};
|
|
15
|
-
var _render = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
15
|
+
var _render = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxOption["default"], {
|
|
16
16
|
option: option
|
|
17
17
|
})),
|
|
18
18
|
getByText = _render.getByText,
|
|
@@ -28,7 +28,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
28
28
|
value: 'Value',
|
|
29
29
|
label: 'Label'
|
|
30
30
|
};
|
|
31
|
-
var _render2 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
31
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxOption["default"], {
|
|
32
32
|
option: option
|
|
33
33
|
})),
|
|
34
34
|
getByText = _render2.getByText;
|
|
@@ -43,7 +43,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
43
43
|
value: 'Value',
|
|
44
44
|
label: 'Label'
|
|
45
45
|
};
|
|
46
|
-
var _render3 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
46
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxOption["default"], {
|
|
47
47
|
option: option,
|
|
48
48
|
selected: true
|
|
49
49
|
})),
|
|
@@ -56,7 +56,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
56
56
|
value: 'Value',
|
|
57
57
|
label: 'Label'
|
|
58
58
|
};
|
|
59
|
-
var _render4 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
59
|
+
var _render4 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxOption["default"], {
|
|
60
60
|
option: option
|
|
61
61
|
})),
|
|
62
62
|
container = _render4.container;
|
|
@@ -7,12 +7,11 @@ exports.Panel = Panel;
|
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
8
|
var _panelContainer = require("./panel-container");
|
|
9
9
|
var _optionContainer = require("./option-container");
|
|
10
|
-
var
|
|
10
|
+
var _comboBoxOption = _interopRequireDefault(require("./combo-box-option"));
|
|
11
11
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
13
|
function Panel(_ref) {
|
|
14
|
-
var
|
|
15
|
-
OptionRender = _ref$optionRenderer === void 0 ? _index.DefaultOptionRenderer : _ref$optionRenderer,
|
|
14
|
+
var OptionRender = _ref.optionRenderer,
|
|
16
15
|
_ref$options = _ref.options,
|
|
17
16
|
options = _ref$options === void 0 ? [] : _ref$options,
|
|
18
17
|
focused = _ref.focused,
|
|
@@ -22,6 +21,7 @@ function Panel(_ref) {
|
|
|
22
21
|
search = _ref.search,
|
|
23
22
|
onSelect = _ref.onSelect;
|
|
24
23
|
var visibleOptions = expanded ? options : [];
|
|
24
|
+
var ComboBoxOptionComponent = OptionRender !== null && OptionRender !== void 0 ? OptionRender : _comboBoxOption["default"];
|
|
25
25
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_panelContainer.PanelContainer, {
|
|
26
26
|
expanded: expanded,
|
|
27
27
|
focused: focused,
|
|
@@ -32,7 +32,7 @@ function Panel(_ref) {
|
|
|
32
32
|
index: index.toString(),
|
|
33
33
|
selected: selectedIndex === index,
|
|
34
34
|
onSelect: onSelect,
|
|
35
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
35
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ComboBoxOptionComponent, {
|
|
36
36
|
option: option,
|
|
37
37
|
selected: selectedIndex === index,
|
|
38
38
|
search: search
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.LabelOrInput = LabelOrInput;
|
|
7
|
+
var _labelSelection = _interopRequireDefault(require("./label-selection"));
|
|
8
|
+
var _input = _interopRequireDefault(require("./input"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
+
/**
|
|
12
|
+
* Display the input or the label of the selection based on the state of the Suggester.
|
|
13
|
+
*
|
|
14
|
+
* When the component is not focused, a representation of what is being searched
|
|
15
|
+
* is presented instead of the Input. This is related to what the user searched
|
|
16
|
+
* (i.e. the letters entered), not directly to the option chosen among the suggestions.
|
|
17
|
+
* Using the input directly to represent the selection causes a conflict with that which the user enters in order to search.
|
|
18
|
+
*/
|
|
19
|
+
function LabelOrInput(props) {
|
|
20
|
+
var editable = props.editable,
|
|
21
|
+
expanded = props.expanded;
|
|
22
|
+
var displayLabel = !editable || !expanded;
|
|
23
|
+
var labelRenderer = props.labelRenderer,
|
|
24
|
+
placeholder = props.placeholder,
|
|
25
|
+
selectedIndex = props.selectedIndex,
|
|
26
|
+
options = props.options,
|
|
27
|
+
search = props.search,
|
|
28
|
+
disabled = props.disabled,
|
|
29
|
+
id = props.id,
|
|
30
|
+
focused = props.focused,
|
|
31
|
+
onChange = props.onChange;
|
|
32
|
+
if (displayLabel) {
|
|
33
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_labelSelection["default"], {
|
|
34
|
+
labelRenderer: labelRenderer,
|
|
35
|
+
placeholder: placeholder,
|
|
36
|
+
selectedIndex: selectedIndex,
|
|
37
|
+
options: options,
|
|
38
|
+
search: search,
|
|
39
|
+
disabled: disabled
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_input["default"], {
|
|
43
|
+
id: "combobox-input-".concat(id),
|
|
44
|
+
className: "lunatic-combo-box-input",
|
|
45
|
+
onChange: onChange,
|
|
46
|
+
value: search,
|
|
47
|
+
placeholder: placeholder,
|
|
48
|
+
disabled: disabled,
|
|
49
|
+
focused: focused
|
|
50
|
+
});
|
|
51
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _react = _interopRequireDefault(require("react"));
|
|
4
|
+
var _react2 = require("@testing-library/react");
|
|
5
|
+
var _LabelOrInput = require("./LabelOrInput");
|
|
6
|
+
var _vitest = require("vitest");
|
|
7
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
9
|
+
(0, _vitest.describe)('displayLabelOrInput', function () {
|
|
10
|
+
(0, _vitest.it)('Render Label when not expended', function () {
|
|
11
|
+
var _render = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_LabelOrInput.LabelOrInput, {
|
|
12
|
+
editable: true,
|
|
13
|
+
expanded: false,
|
|
14
|
+
options: [{
|
|
15
|
+
label: 'hello',
|
|
16
|
+
value: '-1'
|
|
17
|
+
}],
|
|
18
|
+
selectedIndex: 0
|
|
19
|
+
})),
|
|
20
|
+
getByText = _render.getByText;
|
|
21
|
+
(0, _vitest.expect)(getByText('-1 - hello')).toBeInTheDocument();
|
|
22
|
+
});
|
|
23
|
+
});
|
package/lib/components/commons/components/combo-box/selection/__snapshots__/selection.spec.tsx.snap
CHANGED
|
@@ -13,9 +13,11 @@ exports[`Selection component > should render correctly when it is disabled 1`] =
|
|
|
13
13
|
<div
|
|
14
14
|
class="lunatic-combo-box-selected disabled"
|
|
15
15
|
>
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
<span
|
|
17
|
+
class="placeholder"
|
|
18
|
+
>
|
|
19
|
+
hello!
|
|
20
|
+
</span>
|
|
19
21
|
</div>
|
|
20
22
|
</div>
|
|
21
23
|
`;
|
|
@@ -33,9 +35,9 @@ exports[`Selection component > should render correctly when it is editable 1`] =
|
|
|
33
35
|
<div
|
|
34
36
|
class="lunatic-combo-box-selected"
|
|
35
37
|
>
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
<span
|
|
39
|
+
class="placeholder"
|
|
40
|
+
/>
|
|
39
41
|
</div>
|
|
40
42
|
</div>
|
|
41
43
|
`;
|
|
@@ -54,9 +56,9 @@ exports[`Selection component > should render correctly when it is expanded 1`] =
|
|
|
54
56
|
<div
|
|
55
57
|
class="lunatic-combo-box-selected"
|
|
56
58
|
>
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
59
|
+
<span
|
|
60
|
+
class="placeholder"
|
|
61
|
+
/>
|
|
60
62
|
</div>
|
|
61
63
|
</div>
|
|
62
64
|
`;
|
|
@@ -74,9 +76,9 @@ exports[`Selection component > should render correctly with default props 1`] =
|
|
|
74
76
|
<div
|
|
75
77
|
class="lunatic-combo-box-selected"
|
|
76
78
|
>
|
|
77
|
-
<
|
|
78
|
-
|
|
79
|
-
|
|
79
|
+
<span
|
|
80
|
+
class="placeholder"
|
|
81
|
+
/>
|
|
80
82
|
</div>
|
|
81
83
|
</div>
|
|
82
84
|
`;
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.ClearButton = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
8
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
9
9
|
var _icons = require("../../../icons");
|
|
10
10
|
var _fab = require("../../fab");
|
|
11
|
+
var _createCustomizableField = _interopRequireDefault(require("../../../create-customizable-field"));
|
|
11
12
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
14
|
function isDisabled(search) {
|
|
@@ -23,7 +24,7 @@ function createOnKeyDown(onClick) {
|
|
|
23
24
|
}
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
|
-
function
|
|
27
|
+
function ClearButtonComponent(_ref) {
|
|
27
28
|
var className = _ref.className,
|
|
28
29
|
search = _ref.search,
|
|
29
30
|
onClick = _ref.onClick,
|
|
@@ -44,4 +45,6 @@ function Delete(_ref) {
|
|
|
44
45
|
className: "lunatic-combo-box-icon"
|
|
45
46
|
})
|
|
46
47
|
});
|
|
47
|
-
}
|
|
48
|
+
}
|
|
49
|
+
var ClearButton = (0, _createCustomizableField["default"])(ClearButtonComponent, 'ComboboxClearButton');
|
|
50
|
+
exports.ClearButton = ClearButton;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _react = require("@testing-library/react");
|
|
4
4
|
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
5
5
|
var _vitest = require("vitest");
|
|
6
|
-
var
|
|
6
|
+
var _clearButton = require("./clear-button");
|
|
7
7
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
9
9
|
(0, _vitest.describe)('Delete', function () {
|
|
@@ -14,13 +14,13 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
14
14
|
onClickMock.mockClear();
|
|
15
15
|
});
|
|
16
16
|
(0, _vitest.it)('should not render when editable is false', function () {
|
|
17
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
17
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
18
18
|
editable: false
|
|
19
19
|
}));
|
|
20
20
|
(0, _vitest.expect)(_react.screen.queryByRole('button')).not.toBeInTheDocument();
|
|
21
21
|
});
|
|
22
22
|
(0, _vitest.it)('should call onClick when clicked and search is not empty', function () {
|
|
23
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
23
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
24
24
|
editable: true,
|
|
25
25
|
search: search,
|
|
26
26
|
onClick: onClickMock
|
|
@@ -29,7 +29,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
29
29
|
(0, _vitest.expect)(onClickMock).toHaveBeenCalledTimes(1);
|
|
30
30
|
});
|
|
31
31
|
(0, _vitest.it)('should not call onClick when clicked and search is empty', function () {
|
|
32
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
32
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
33
33
|
editable: true,
|
|
34
34
|
search: "",
|
|
35
35
|
onClick: onClickMock
|
|
@@ -40,7 +40,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
40
40
|
(0, _vitest.it)('should call onClick when the Enter key is pressed and search is not empty', function () {
|
|
41
41
|
var search = 'test';
|
|
42
42
|
var onClick = _vitest.vi.fn();
|
|
43
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
43
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
44
44
|
search: search,
|
|
45
45
|
onClick: onClick,
|
|
46
46
|
editable: true
|
|
@@ -52,7 +52,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
52
52
|
(0, _vitest.expect)(onClick).toHaveBeenCalledTimes(1);
|
|
53
53
|
});
|
|
54
54
|
(0, _vitest.it)('should not call onClick when the Enter key is pressed and search is empty', function () {
|
|
55
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
55
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
56
56
|
editable: true,
|
|
57
57
|
search: "",
|
|
58
58
|
onClick: onClickMock
|
|
@@ -61,7 +61,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
61
61
|
(0, _vitest.expect)(onClickMock).toHaveBeenCalledTimes(0);
|
|
62
62
|
});
|
|
63
63
|
(0, _vitest.it)('should apply the className prop', function () {
|
|
64
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
64
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
65
65
|
className: className,
|
|
66
66
|
editable: true,
|
|
67
67
|
search: search,
|
|
@@ -70,7 +70,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
70
70
|
(0, _vitest.expect)(_react.screen.getByRole('button')).toHaveClass(className);
|
|
71
71
|
});
|
|
72
72
|
(0, _vitest.it)('should be disabled when search is empty', function () {
|
|
73
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
73
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
74
74
|
editable: true,
|
|
75
75
|
search: "",
|
|
76
76
|
onClick: onClickMock
|
|
@@ -78,7 +78,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
78
78
|
(0, _vitest.expect)(_react.screen.getByRole('button')).toBeDisabled();
|
|
79
79
|
});
|
|
80
80
|
(0, _vitest.it)('should not be disabled when search is not empty', function () {
|
|
81
|
-
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
81
|
+
(0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_clearButton.ClearButton, {
|
|
82
82
|
editable: true,
|
|
83
83
|
search: search,
|
|
84
84
|
onClick: onClickMock
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
8
|
+
var _createCustomizableField = _interopRequireDefault(require("../../../create-customizable-field"));
|
|
9
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
+
function isPlaceholder(option, search) {
|
|
12
|
+
return !option && (!search || search.length === 0);
|
|
13
|
+
}
|
|
14
|
+
function getContent(option, search, placeholder) {
|
|
15
|
+
if (option) {
|
|
16
|
+
var id = option.id,
|
|
17
|
+
value = option.value,
|
|
18
|
+
label = option.label;
|
|
19
|
+
return label ? "".concat(id || value, " - ").concat(label) : id || value;
|
|
20
|
+
}
|
|
21
|
+
if (search && search.trim().length) {
|
|
22
|
+
return search;
|
|
23
|
+
}
|
|
24
|
+
return placeholder !== null && placeholder !== void 0 ? placeholder : '';
|
|
25
|
+
}
|
|
26
|
+
function ComboBoxLabelSelection(_ref) {
|
|
27
|
+
var option = _ref.option,
|
|
28
|
+
placeholder = _ref.placeholder,
|
|
29
|
+
search = _ref.search,
|
|
30
|
+
_ref$disabled = _ref.disabled,
|
|
31
|
+
disabled = _ref$disabled === void 0 ? false : _ref$disabled;
|
|
32
|
+
var isPh = isPlaceholder(option, search);
|
|
33
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
34
|
+
className: (0, _classnames["default"])('lunatic-combo-box-selected', {
|
|
35
|
+
disabled: disabled
|
|
36
|
+
}),
|
|
37
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
|
|
38
|
+
className: (0, _classnames["default"])({
|
|
39
|
+
placeholder: isPh,
|
|
40
|
+
selection: !isPh
|
|
41
|
+
}),
|
|
42
|
+
children: getContent(option, search, placeholder)
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
var _default = (0, _createCustomizableField["default"])(ComboBoxLabelSelection, 'ComboboxLabelSelection');
|
|
47
|
+
exports["default"] = _default;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _react = _interopRequireDefault(require("react"));
|
|
4
4
|
var _react2 = require("@testing-library/react");
|
|
5
|
-
var
|
|
5
|
+
var _comboBoxLabelSelection = _interopRequireDefault(require("./combo-box-label-selection"));
|
|
6
6
|
var _vitest = require("vitest");
|
|
7
7
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
@@ -14,7 +14,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
14
14
|
label: 'Label'
|
|
15
15
|
};
|
|
16
16
|
(0, _vitest.it)('should render with selected option', function () {
|
|
17
|
-
var _render = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
17
|
+
var _render = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxLabelSelection["default"], {
|
|
18
18
|
option: option,
|
|
19
19
|
placeholder: "Select an option"
|
|
20
20
|
})),
|
|
@@ -23,7 +23,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
23
23
|
(0, _vitest.expect)(getByText(expectedContent)).toBeInTheDocument();
|
|
24
24
|
});
|
|
25
25
|
(0, _vitest.it)('should render with placeholder', function () {
|
|
26
|
-
var _render2 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
26
|
+
var _render2 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxLabelSelection["default"], {
|
|
27
27
|
option: null,
|
|
28
28
|
placeholder: "Select an option"
|
|
29
29
|
})),
|
|
@@ -31,7 +31,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
31
31
|
(0, _vitest.expect)(getByText('Select an option')).toBeInTheDocument();
|
|
32
32
|
});
|
|
33
33
|
(0, _vitest.it)('should render with search value', function () {
|
|
34
|
-
var _render3 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
34
|
+
var _render3 = (0, _react2.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_comboBoxLabelSelection["default"], {
|
|
35
35
|
option: null,
|
|
36
36
|
search: "Search value",
|
|
37
37
|
placeholder: "Select an option"
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
|
-
var
|
|
10
|
+
var _createCustomizableField = _interopRequireDefault(require("../../../create-customizable-field"));
|
|
11
11
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
13
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -52,5 +52,5 @@ function Input(_ref) {
|
|
|
52
52
|
onKeyDown: onKeydown
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
|
-
var _default = (0,
|
|
55
|
+
var _default = (0, _createCustomizableField["default"])(Input, 'ComboboxInput');
|
|
56
56
|
exports["default"] = _default;
|
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.LabelSelection = LabelSelection;
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = _interopRequireDefault(require("react"));
|
|
9
|
-
var
|
|
10
|
-
var _displayLabelOrInput = require("./displayLabelOrInput");
|
|
9
|
+
var _comboBoxLabelSelection = _interopRequireDefault(require("./combo-box-label-selection"));
|
|
11
10
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
12
|
function LabelSelection(_ref) {
|
|
@@ -18,16 +17,13 @@ function LabelSelection(_ref) {
|
|
|
18
17
|
search = _ref.search,
|
|
19
18
|
disabled = _ref.disabled;
|
|
20
19
|
var option = selectedIndex !== undefined ? options[selectedIndex] : undefined;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
placeholder: placeholder,
|
|
28
|
-
search: search
|
|
29
|
-
})
|
|
20
|
+
var LabelSelectionComponent = Renderer !== null && Renderer !== void 0 ? Renderer : _comboBoxLabelSelection["default"];
|
|
21
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(LabelSelectionComponent, {
|
|
22
|
+
option: option,
|
|
23
|
+
placeholder: placeholder,
|
|
24
|
+
search: search,
|
|
25
|
+
disabled: disabled
|
|
30
26
|
});
|
|
31
27
|
}
|
|
32
|
-
var _default =
|
|
28
|
+
var _default = LabelSelection;
|
|
33
29
|
exports["default"] = _default;
|
|
@@ -16,15 +16,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
16
16
|
label: 'Option 3',
|
|
17
17
|
value: 'banana'
|
|
18
18
|
}];
|
|
19
|
-
var LabelRenderer = function LabelRenderer(props) {
|
|
20
|
-
var _props$option$label, _props$option;
|
|
21
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
22
|
-
children: (_props$option$label = (_props$option = props.option) === null || _props$option === void 0 ? void 0 : _props$option.label) !== null && _props$option$label !== void 0 ? _props$option$label : 'Unknown'
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
19
|
(0, _vitest.it)('should render the labelRenderer when expanded is true and editable is false', function () {
|
|
26
20
|
var _render = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_labelSelection["default"], {
|
|
27
|
-
labelRenderer: LabelRenderer,
|
|
28
21
|
selectedIndex: 0,
|
|
29
22
|
options: options,
|
|
30
23
|
placeholder: "Select an option...",
|
|
@@ -32,18 +25,17 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "d
|
|
|
32
25
|
disabled: false
|
|
33
26
|
})),
|
|
34
27
|
getByText = _render.getByText;
|
|
35
|
-
(0, _vitest.expect)(getByText('Option 1')).toBeInTheDocument();
|
|
28
|
+
(0, _vitest.expect)(getByText('apple - Option 1')).toBeInTheDocument();
|
|
36
29
|
});
|
|
37
30
|
(0, _vitest.it)('should add the disabled class when disabled is true', function () {
|
|
38
31
|
var _render2 = (0, _react.render)( /*#__PURE__*/(0, _jsxRuntime.jsx)(_labelSelection["default"], {
|
|
39
|
-
labelRenderer: LabelRenderer,
|
|
40
32
|
selectedIndex: 0,
|
|
41
33
|
options: options,
|
|
42
34
|
placeholder: "Select an option...",
|
|
43
35
|
search: "search term",
|
|
44
36
|
disabled: true
|
|
45
37
|
})),
|
|
46
|
-
|
|
47
|
-
(0, _vitest.expect)(
|
|
38
|
+
getByText = _render2.getByText;
|
|
39
|
+
(0, _vitest.expect)(getByText('apple - Option 1').parentElement).toHaveClass('disabled');
|
|
48
40
|
});
|
|
49
41
|
});
|