@dhis2-ui/selector-bar 7.10.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.
Files changed (36) hide show
  1. package/README.md +6 -0
  2. package/build/cjs/index.js +21 -0
  3. package/build/cjs/locales/en/translations.json +3 -0
  4. package/build/cjs/locales/index.js +27 -0
  5. package/build/cjs/selector-bar/__stories__/common.js +252 -0
  6. package/build/cjs/selector-bar/__stories__/keep-org-unit-expanded.js +71 -0
  7. package/build/cjs/selector-bar/__stories__/with-multiple-rows.js +108 -0
  8. package/build/cjs/selector-bar/__stories__/with-right-hand-side-content.js +79 -0
  9. package/build/cjs/selector-bar/__stories__/with-some-inputs.js +68 -0
  10. package/build/cjs/selector-bar/index.js +13 -0
  11. package/build/cjs/selector-bar/selector-bar.js +78 -0
  12. package/build/cjs/selector-bar/selector-bar.stories.js +43 -0
  13. package/build/cjs/selector-bar/selector-bar.test.js +78 -0
  14. package/build/cjs/selector-bar-item/features/toggle-children/index.js +24 -0
  15. package/build/cjs/selector-bar-item/features/toggle-children.feature +11 -0
  16. package/build/cjs/selector-bar-item/index.js +13 -0
  17. package/build/cjs/selector-bar-item/selector-bar-item.js +100 -0
  18. package/build/cjs/selector-bar-item/selector-bar-item.stories.e2e.js +98 -0
  19. package/build/es/index.js +2 -0
  20. package/build/es/locales/en/translations.json +3 -0
  21. package/build/es/locales/index.js +13 -0
  22. package/build/es/selector-bar/__stories__/common.js +213 -0
  23. package/build/es/selector-bar/__stories__/keep-org-unit-expanded.js +54 -0
  24. package/build/es/selector-bar/__stories__/with-multiple-rows.js +92 -0
  25. package/build/es/selector-bar/__stories__/with-right-hand-side-content.js +64 -0
  26. package/build/es/selector-bar/__stories__/with-some-inputs.js +54 -0
  27. package/build/es/selector-bar/index.js +1 -0
  28. package/build/es/selector-bar/selector-bar.js +60 -0
  29. package/build/es/selector-bar/selector-bar.stories.js +7 -0
  30. package/build/es/selector-bar/selector-bar.test.js +64 -0
  31. package/build/es/selector-bar-item/features/toggle-children/index.js +21 -0
  32. package/build/es/selector-bar-item/features/toggle-children.feature +11 -0
  33. package/build/es/selector-bar-item/index.js +1 -0
  34. package/build/es/selector-bar-item/selector-bar-item.js +77 -0
  35. package/build/es/selector-bar-item/selector-bar-item.stories.e2e.js +79 -0
  36. package/package.json +59 -0
@@ -0,0 +1,77 @@
1
+ import _JSXStyle from "styled-jsx/style";
2
+ import { Card } from '@dhis2-ui/card';
3
+ import { Layer } from '@dhis2-ui/layer';
4
+ import { Popper } from '@dhis2-ui/popper';
5
+ import { colors, spacers } from '@dhis2/ui-constants';
6
+ import { IconChevronUp24, IconChevronDown24 } from '@dhis2/ui-icons';
7
+ import PropTypes from 'prop-types';
8
+ import React, { useRef } from 'react';
9
+ const offsetModifier = {
10
+ name: 'offset',
11
+ options: {
12
+ offset: [0, 2]
13
+ }
14
+ };
15
+ /**
16
+ * The reason this component expects the "open" state and "setOpen" function is
17
+ * because certain actions inside the props.children might have to set "open"
18
+ * to false as well.
19
+ * A good example is selecting a value (which is not a click outside) and this
20
+ * component neither has any control over that component nor does it have a way
21
+ * to "observe" that behavior. Especially for selection bar items that allow
22
+ * "multiple" selections, this would be more or less impossible to predict
23
+ * inside this component
24
+ */
25
+
26
+ export const SelectorBarItem = ({
27
+ open,
28
+ setOpen,
29
+ children,
30
+ disabled,
31
+ label,
32
+ value,
33
+ noValueMessage
34
+ }) => {
35
+ const buttonRef = useRef();
36
+ const Icon = open ? IconChevronUp24 : IconChevronDown24;
37
+ return /*#__PURE__*/React.createElement("button", {
38
+ ref: buttonRef,
39
+ disabled: disabled,
40
+ onClick: () => setOpen(true),
41
+ className: _JSXStyle.dynamic([["3065814091", [
42
+ /*
43
+ * The arrow icon has ~4px empty space on the sides,
44
+ * that's why the padding on the right is only 8px.
45
+ */
46
+ '', spacers.dp8, spacers.dp12, colors.grey400, colors.grey600, spacers.dp8, spacers.dp4]]]) + " " + "selector-bar-item"
47
+ }, /*#__PURE__*/React.createElement("span", {
48
+ className: _JSXStyle.dynamic([["3065814091", ['', spacers.dp8, spacers.dp12, colors.grey400, colors.grey600, spacers.dp8, spacers.dp4]]]) + " " + "label"
49
+ }, label), !disabled && /*#__PURE__*/React.createElement("span", {
50
+ className: _JSXStyle.dynamic([["3065814091", ['', spacers.dp8, spacers.dp12, colors.grey400, colors.grey600, spacers.dp8, spacers.dp4]]]) + " " + "value"
51
+ }, value || noValueMessage), /*#__PURE__*/React.createElement("span", {
52
+ className: _JSXStyle.dynamic([["3065814091", ['', spacers.dp8, spacers.dp12, colors.grey400, colors.grey600, spacers.dp8, spacers.dp4]]]) + " " + "toggle-icon"
53
+ }, /*#__PURE__*/React.createElement(Icon, {
54
+ className: _JSXStyle.dynamic([["3065814091", ['', spacers.dp8, spacers.dp12, colors.grey400, colors.grey600, spacers.dp8, spacers.dp4]]])
55
+ })), open && /*#__PURE__*/React.createElement(Layer, {
56
+ onClick: (_, evt) => {
57
+ evt.stopPropagation();
58
+ setOpen(false);
59
+ }
60
+ }, /*#__PURE__*/React.createElement(Popper, {
61
+ reference: buttonRef,
62
+ placement: "bottom-end",
63
+ modifiers: [offsetModifier]
64
+ }, /*#__PURE__*/React.createElement(Card, null, children))), /*#__PURE__*/React.createElement(_JSXStyle, {
65
+ id: "3065814091",
66
+ dynamic: ['', spacers.dp8, spacers.dp12, colors.grey400, colors.grey600, spacers.dp8, spacers.dp4]
67
+ }, [`.selector-bar-item.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;background:none;height:40px;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;${''} padding:0 ${spacers.dp8} 0 ${spacers.dp12};font-size:14px;line-height:16px;border:none;box-shadow:0px 0px 0px 1px ${colors.grey400};}`, ".selector-bar-item.__jsx-style-dynamic-selector:disabled{cursor:not-allowed;}", `.label.__jsx-style-dynamic-selector{color:${colors.grey600};}`, `.value.__jsx-style-dynamic-selector{padding-left:${spacers.dp8};}`, `.toggle-icon.__jsx-style-dynamic-selector{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;margin-left:${spacers.dp4};height:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}`]));
68
+ };
69
+ SelectorBarItem.propTypes = {
70
+ children: PropTypes.any.isRequired,
71
+ label: PropTypes.string.isRequired,
72
+ noValueMessage: PropTypes.string.isRequired,
73
+ open: PropTypes.bool.isRequired,
74
+ setOpen: PropTypes.func.isRequired,
75
+ disabled: PropTypes.bool,
76
+ value: PropTypes.string
77
+ };
@@ -0,0 +1,79 @@
1
+ import { SingleSelectField, SingleSelectOption } from '@dhis2-ui/select';
2
+ import React, { useState } from 'react';
3
+ import { SelectorBarItem } from './selector-bar-item.js';
4
+ const options = [{
5
+ value: 'value 1',
6
+ label: 'label 1'
7
+ }, {
8
+ value: 'value 2',
9
+ label: 'label 2'
10
+ }, {
11
+ value: 'value 3',
12
+ label: 'label 3'
13
+ }];
14
+
15
+ const createStateDecorator = args => {
16
+ return fn => {
17
+ const [selected, setSelected] = useState((args === null || args === void 0 ? void 0 : args.selected) || '');
18
+ const [open, setOpen] = useState((args === null || args === void 0 ? void 0 : args.open) || false);
19
+ return fn({
20
+ selected,
21
+ open,
22
+ setSelected,
23
+ setOpen
24
+ });
25
+ };
26
+ };
27
+
28
+ const createStory = () => (_, {
29
+ open,
30
+ setOpen,
31
+ selected,
32
+ setSelected
33
+ }) => {
34
+ var _options$find;
35
+
36
+ return /*#__PURE__*/React.createElement(SelectorBarItem, {
37
+ label: "Selection bar item",
38
+ noValueMessage: "No value message",
39
+ open: open,
40
+ setOpen: setOpen,
41
+ value: ((_options$find = options.find(({
42
+ value
43
+ }) => value === selected)) === null || _options$find === void 0 ? void 0 : _options$find.label) || ''
44
+ }, /*#__PURE__*/React.createElement(SingleSelectField, {
45
+ selected: selected,
46
+ onChange: ({
47
+ selected: nextSelected
48
+ }) => {
49
+ setSelected(nextSelected);
50
+ setOpen(false);
51
+ }
52
+ }, options.map(({
53
+ value,
54
+ label
55
+ }) => /*#__PURE__*/React.createElement(SingleSelectOption, {
56
+ key: value,
57
+ value: value,
58
+ label: label
59
+ }))));
60
+ };
61
+
62
+ export default {
63
+ title: 'SelectorBarItem'
64
+ };
65
+ export const ClosedNoValue = createStory();
66
+ ClosedNoValue.decorators = [createStateDecorator()];
67
+ export const OpenNoValue = createStory();
68
+ OpenNoValue.decorators = [createStateDecorator({
69
+ open: true
70
+ })];
71
+ export const ClosedWithValue = createStory();
72
+ ClosedWithValue.decorators = [createStateDecorator({
73
+ selected: 'value 1'
74
+ })];
75
+ export const OpenWithValue = createStory();
76
+ OpenWithValue.decorators = [createStateDecorator({
77
+ open: true,
78
+ selected: 'value 1'
79
+ })];
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@dhis2-ui/selector-bar",
3
+ "version": "7.10.0",
4
+ "description": "UI Select",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/dhis2/ui.git",
8
+ "directory": "components/selector-bar"
9
+ },
10
+ "homepage": "https://github.com/dhis2/ui#readme",
11
+ "license": "BSD-3-Clause",
12
+ "private": false,
13
+ "main": "./build/cjs/index.js",
14
+ "module": "./build/es/index.js",
15
+ "exports": {
16
+ "import": "./build/es/index.js",
17
+ "require": "./build/cjs/index.js"
18
+ },
19
+ "sideEffects": false,
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "start": "start-storybook -c ../../storybook/config --port 5000",
25
+ "build": "d2-app-scripts build",
26
+ "test": "d2-app-scripts test --jestConfig ../../jest.config.shared.js"
27
+ },
28
+ "peerDependencies": {
29
+ "@dhis2/d2-i18n": "^1",
30
+ "react": "^16.8",
31
+ "react-dom": "^16.8",
32
+ "styled-jsx": "^4"
33
+ },
34
+ "dependencies": {
35
+ "@dhis2-ui/button": "7.10.0",
36
+ "@dhis2-ui/card": "7.10.0",
37
+ "@dhis2-ui/popper": "7.10.0",
38
+ "@dhis2-ui/layer": "7.10.0",
39
+ "@dhis2/ui-constants": "7.10.0",
40
+ "@dhis2/ui-icons": "7.10.0",
41
+ "@testing-library/react": "^12.1.2",
42
+ "classnames": "^2.3.1",
43
+ "prop-types": "^15.7.2"
44
+ },
45
+ "devDependencies": {
46
+ "@dhis2-ui/css": "7.10.0",
47
+ "@dhis2-ui/menu": "7.10.0",
48
+ "@dhis2-ui/organisation-unit-tree": "7.10.0",
49
+ "@dhis2-ui/select": "7.10.0",
50
+ "@dhis2/d2-i18n": "^1.1.0",
51
+ "@testing-library/jest-dom": "^5.16.1",
52
+ "react": "16.13",
53
+ "react-dom": "16.13",
54
+ "styled-jsx": "^4.0.1"
55
+ },
56
+ "files": [
57
+ "build"
58
+ ]
59
+ }