@tecsinapse/react-web-kit 1.12.11 → 1.14.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 (26) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/dist/components/atoms/Dropdown/index.d.ts +9 -0
  3. package/dist/components/atoms/Dropdown/index.js +42 -0
  4. package/dist/components/atoms/Dropdown/index.js.map +1 -0
  5. package/dist/components/atoms/Dropdown/styled.d.ts +2 -0
  6. package/dist/components/atoms/Dropdown/styled.js +36 -0
  7. package/dist/components/atoms/Dropdown/styled.js.map +1 -0
  8. package/dist/components/molecules/DatePicker/DatePicker.d.ts +1 -1
  9. package/dist/components/molecules/DatePicker/DatePicker.js +33 -5
  10. package/dist/components/molecules/DatePicker/DatePicker.js.map +1 -1
  11. package/dist/components/molecules/DateTimePicker/DateTimePicker.js +3 -4
  12. package/dist/components/molecules/DateTimePicker/DateTimePicker.js.map +1 -1
  13. package/dist/components/molecules/Select/SelectItem/SelectItem.d.ts +1 -1
  14. package/dist/components/molecules/Select/SelectItem/SelectItem.js +9 -4
  15. package/dist/components/molecules/Select/SelectItem/SelectItem.js.map +1 -1
  16. package/dist/components/organisms/DataGrid/Footer/styled.js +6 -4
  17. package/dist/components/organisms/DataGrid/Footer/styled.js.map +1 -1
  18. package/package.json +3 -3
  19. package/src/components/atoms/Dropdown/index.tsx +35 -0
  20. package/src/components/atoms/Dropdown/styled.ts +15 -0
  21. package/src/components/molecules/DatePicker/DatePicker.stories.tsx +1 -1
  22. package/src/components/molecules/DatePicker/DatePicker.tsx +53 -13
  23. package/src/components/molecules/DateTimePicker/DateTimePicker.stories.tsx +8 -3
  24. package/src/components/molecules/DateTimePicker/DateTimePicker.tsx +22 -20
  25. package/src/components/molecules/Select/SelectItem/SelectItem.tsx +29 -3
  26. package/src/components/organisms/DataGrid/Footer/styled.ts +4 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,47 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [1.14.0](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.13.0...@tecsinapse/react-web-kit@1.14.0) (2022-02-09)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * DateTimePicker stories ([e6cf5c1](https://github.com/tecsinapse/design-system/commit/e6cf5c1a4c11eb4113daa77fc4e5beb89c775793))
12
+
13
+
14
+
15
+
16
+
17
+ # [1.13.0](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.12.13...@tecsinapse/react-web-kit@1.13.0) (2022-02-02)
18
+
19
+ **Note:** Version bump only for package @tecsinapse/react-web-kit
20
+
21
+
22
+
23
+
24
+
25
+ ## [1.12.13](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.12.12...@tecsinapse/react-web-kit@1.12.13) (2022-01-28)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * using keyExtractor instead of Data to do check validations in Select type multi ([268a4f6](https://github.com/tecsinapse/design-system/commit/268a4f6cf33d0d27d86da74c57f4ce42e485bd5f))
31
+
32
+
33
+
34
+
35
+
36
+ ## [1.12.12](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.12.11...@tecsinapse/react-web-kit@1.12.12) (2022-01-19)
37
+
38
+
39
+ ### Bug Fixes
40
+
41
+ * fix DataGrid pagination buttons ([c9d40cf](https://github.com/tecsinapse/design-system/commit/c9d40cf9a0655338a6d35d42dbc399768d8cf58d))
42
+
43
+
44
+
45
+
46
+
6
47
  ## [1.12.11](https://github.com/tecsinapse/design-system/compare/@tecsinapse/react-web-kit@1.12.10...@tecsinapse/react-web-kit@1.12.11) (2022-01-19)
7
48
 
8
49
  **Note:** Version bump only for package @tecsinapse/react-web-kit
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import { Dispatch, SetStateAction } from 'react';
3
+ export interface DropdownProps {
4
+ visible: boolean;
5
+ setVisible: Dispatch<SetStateAction<boolean>>;
6
+ }
7
+ export declare const Dropdown: React.FC<DropdownProps & {
8
+ children: JSX.Element;
9
+ }>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Dropdown = void 0;
7
+
8
+ var React = _interopRequireWildcard(require("react"));
9
+
10
+ var _styled = require("./styled");
11
+
12
+ var _reactTransitionGroup = require("react-transition-group");
13
+
14
+ var _animations = require("../../molecules/Select/animations");
15
+
16
+ var _reactWebKit = require("@tecsinapse/react-web-kit");
17
+
18
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
+
20
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
+
22
+ const Component = ({
23
+ visible,
24
+ setVisible,
25
+ children
26
+ }) => {
27
+ const refDropDown = React.useRef(null);
28
+ (0, _reactWebKit.useClickAwayListener)(refDropDown, setVisible);
29
+ return React.createElement(_reactTransitionGroup.Transition, {
30
+ in: visible,
31
+ timeout: 300
32
+ }, state => React.createElement(_styled.StyledContainerDropdown, {
33
+ style: { ..._animations.defaultStyles,
34
+ ..._animations.transition['bottom'][state]
35
+ },
36
+ ref: refDropDown
37
+ }, children));
38
+ };
39
+
40
+ const Dropdown = Component;
41
+ exports.Dropdown = Dropdown;
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/atoms/Dropdown/index.tsx"],"names":["Component","visible","setVisible","children","refDropDown","React","useRef","state","defaultStyles","transition","Dropdown"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAOA,MAAMA,SAA8D,GAAG,CAAC;AACtEC,EAAAA,OADsE;AAEtEC,EAAAA,UAFsE;AAGtEC,EAAAA;AAHsE,CAAD,KAIpD;AACjB,QAAMC,WAAW,GAAGC,KAAK,CAACC,MAAN,CAAa,IAAb,CAApB;AACA,yCAAqBF,WAArB,EAAkCF,UAAlC;AAEA,SACE,oBAAC,gCAAD;AAAY,IAAA,EAAE,EAAED,OAAhB;AAAyB,IAAA,OAAO,EAAE;AAAlC,KACGM,KAAK,IACJ,oBAAC,+BAAD;AACE,IAAA,KAAK,EAAE,EAAE,GAAGC,yBAAL;AAAoB,SAAGC,uBAAW,QAAX,EAAqBF,KAArB;AAAvB,KADT;AAEE,IAAA,GAAG,EAAEH;AAFP,KAIGD,QAJH,CAFJ,CADF;AAYD,CApBD;;AAsBO,MAAMO,QAAQ,GAAGV,SAAjB","sourcesContent":["import * as React from 'react';\nimport { StyledContainerDropdown } from './styled';\nimport { Transition } from 'react-transition-group';\nimport { defaultStyles, transition } from '../../molecules/Select/animations';\nimport { Dispatch, SetStateAction } from 'react';\nimport { useClickAwayListener } from '@tecsinapse/react-web-kit';\n\nexport interface DropdownProps {\n visible: boolean;\n setVisible: Dispatch<SetStateAction<boolean>>;\n}\n\nconst Component: React.FC<DropdownProps & { children: JSX.Element }> = ({\n visible,\n setVisible,\n children,\n}): JSX.Element => {\n const refDropDown = React.useRef(null);\n useClickAwayListener(refDropDown, setVisible);\n\n return (\n <Transition in={visible} timeout={300}>\n {state => (\n <StyledContainerDropdown\n style={{ ...defaultStyles, ...transition['bottom'][state] }}\n ref={refDropDown}\n >\n {children}\n </StyledContainerDropdown>\n )}\n </Transition>\n );\n};\n\nexport const Dropdown = Component;\n"],"file":"index.js"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const StyledContainerDropdown: import("@emotion/styled").StyledComponent<any, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StyledContainerDropdown = void 0;
7
+
8
+ var _styled = _interopRequireDefault(require("@emotion/styled"));
9
+
10
+ var _reactCore = require("@tecsinapse/react-core");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ const StyledContainerDropdown = (0, _styled.default)('div')`
15
+ width: auto;
16
+ background-color: ${({
17
+ theme
18
+ }) => theme.miscellaneous.surfaceColor};
19
+ border-radius: ${({
20
+ theme
21
+ }) => theme.borderRadius.mili};
22
+ box-shadow: 0 2px 8px
23
+ ${({
24
+ theme
25
+ }) => (0, _reactCore.hex2rgba)(theme.miscellaneous.shadow, 0.05)};
26
+ position: absolute;
27
+ padding-bottom: ${({
28
+ theme
29
+ }) => theme.spacing.mili};
30
+ margin-top: 8px;
31
+ z-index: ${({
32
+ theme
33
+ }) => theme.zIndex.select};
34
+ `;
35
+ exports.StyledContainerDropdown = StyledContainerDropdown;
36
+ //# sourceMappingURL=styled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/components/atoms/Dropdown/styled.ts"],"names":["StyledContainerDropdown","theme","miscellaneous","surfaceColor","borderRadius","mili","shadow","spacing","zIndex","select"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEO,MAAMA,uBAAuB,GAAG,qBAAO,KAAP,CAAmC;AAC1E;AACA,sBAAsB,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAClBA,KAAK,CAACC,aAAN,CAAoBC,YAAa;AACrC,mBAAmB,CAAC;AAAEF,EAAAA;AAAF,CAAD,KAA2BA,KAAK,CAACG,YAAN,CAAmBC,IAAK;AACtE;AACA,MAAM,CAAC;AAAEJ,EAAAA;AAAF,CAAD,KAA2B,yBAASA,KAAK,CAACC,aAAN,CAAoBI,MAA7B,EAAqC,IAArC,CAA2C;AAC5E;AACA,oBAAoB,CAAC;AAAEL,EAAAA;AAAF,CAAD,KAA2BA,KAAK,CAACM,OAAN,CAAcF,IAAK;AAClE;AACA,aAAa,CAAC;AAAEJ,EAAAA;AAAF,CAAD,KAA2BA,KAAK,CAACO,MAAN,CAAaC,MAAO;AAC5D,CAXO","sourcesContent":["import styled from '@emotion/styled';\nimport { hex2rgba, StyleProps } from '@tecsinapse/react-core';\n\nexport const StyledContainerDropdown = styled('div')<Partial<StyleProps>>`\n width: auto;\n background-color: ${({ theme }: StyleProps) =>\n theme.miscellaneous.surfaceColor};\n border-radius: ${({ theme }: StyleProps) => theme.borderRadius.mili};\n box-shadow: 0 2px 8px\n ${({ theme }: StyleProps) => hex2rgba(theme.miscellaneous.shadow, 0.05)};\n position: absolute;\n padding-bottom: ${({ theme }: StyleProps) => theme.spacing.mili};\n margin-top: 8px;\n z-index: ${({ theme }: StyleProps) => theme.zIndex.select};\n`;\n"],"file":"styled.js"}
@@ -1,3 +1,3 @@
1
1
  import { DatePickerProps, SelectionType } from '@tecsinapse/react-core';
2
2
  export declare type WebDatePickerProps<T extends SelectionType> = Omit<DatePickerProps<T>, 'CalendarComponent' | 'renderCalendar' | 'requestCloseCalendar' | 'requestShowCalendar'>;
3
- export declare const DatePicker: <T extends any>({ ...rest }: WebDatePickerProps<T>) => JSX.Element;
3
+ export declare const DatePicker: <T extends any>({ value, type, ...rest }: WebDatePickerProps<T>) => JSX.Element;
@@ -9,7 +9,7 @@ var _reactCore = require("@tecsinapse/react-core");
9
9
 
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
 
12
- var _Modal = require("./Modal");
12
+ var _Dropdown = require("../../atoms/Dropdown");
13
13
 
14
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
15
 
@@ -17,19 +17,47 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
17
17
 
18
18
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
19
 
20
- const DatePicker = ({ ...rest
20
+ const DatePicker = ({
21
+ value,
22
+ type,
23
+ ...rest
21
24
  }) => {
22
25
  const [visible, setVisible] = (0, _react.useState)(false);
23
26
  const show = (0, _react.useCallback)(() => setVisible(true), []);
24
27
  const close = (0, _react.useCallback)(() => setVisible(false), []);
28
+ const getYear = (0, _react.useMemo)(() => {
29
+ if (value) {
30
+ if (type === 'range') {
31
+ if (value.lowest !== undefined) return new Date(value.lowest).getFullYear();
32
+ } else {
33
+ return new Date(value).getFullYear();
34
+ }
35
+ }
36
+
37
+ return undefined;
38
+ }, [value]);
39
+ const getMonth = (0, _react.useMemo)(() => {
40
+ if (value) {
41
+ if (type === 'range') {
42
+ if (value.lowest !== undefined) return new Date(value.lowest).getMonth();
43
+ } else {
44
+ return new Date(value).getMonth();
45
+ }
46
+ }
47
+
48
+ return undefined;
49
+ }, [value]);
25
50
  return _react.default.createElement(_reactCore.DatePicker, _extends({}, rest, {
26
51
  CalendarComponent: _reactCore.Calendar,
52
+ value: value,
53
+ type: type,
54
+ year: getYear,
55
+ month: getMonth,
27
56
  requestShowCalendar: show,
28
57
  requestCloseCalendar: close,
29
- renderCalendar: calendar => _react.default.createElement(_Modal.Modal, {
30
- animationType: "fade",
58
+ renderCalendar: calendar => _react.default.createElement(_Dropdown.Dropdown, {
31
59
  visible: visible,
32
- onRequestClose: close
60
+ setVisible: setVisible
33
61
  }, calendar)
34
62
  }));
35
63
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/molecules/DatePicker/DatePicker.tsx"],"names":["DatePicker","rest","visible","setVisible","show","close","Calendar","calendar"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;;;;;;;AAIO,MAAMA,UAAU,GAAG,CAA0B,EAAE,GAAGC;AAAL,CAA1B,KAA8E;AAEtG,QAAM,CAAEC,OAAF,EAAWC,UAAX,IAA0B,qBAAS,KAAT,CAAhC;AACA,QAAMC,IAAI,GAAG,wBAAY,MAAMD,UAAU,CAAC,IAAD,CAA5B,EAAoC,EAApC,CAAb;AACA,QAAME,KAAK,GAAG,wBAAY,MAAMF,UAAU,CAAC,KAAD,CAA5B,EAAqC,EAArC,CAAd;AAEA,SACE,6BAAC,qBAAD,eACMF,IADN;AAEE,IAAA,iBAAiB,EAAEK,mBAFrB;AAGE,IAAA,mBAAmB,EAAEF,IAHvB;AAIE,IAAA,oBAAoB,EAAEC,KAJxB;AAKE,IAAA,cAAc,EAAGE,QAAD,IACd,6BAAC,YAAD;AAAO,MAAA,aAAa,EAAC,MAArB;AAA4B,MAAA,OAAO,EAAEL,OAArC;AAA8C,MAAA,cAAc,EAAEG;AAA9D,OACGE,QADH;AANJ,KADF;AAaD,CAnBM","sourcesContent":["import {\n Calendar,\n DatePicker as DatePickerCore, DatePickerProps, SelectionType\n} from '@tecsinapse/react-core';\nimport React, { useCallback, useState } from 'react';\nimport { Modal } from './Modal';\n\nexport type WebDatePickerProps<T extends SelectionType> = Omit<DatePickerProps<T>, 'CalendarComponent' | 'renderCalendar' | 'requestCloseCalendar' | 'requestShowCalendar'>\n\nexport const DatePicker = <T extends SelectionType>({ ...rest }: WebDatePickerProps<T>): JSX.Element => {\n\n const [ visible, setVisible ] = useState(false)\n const show = useCallback(() => setVisible(true), [])\n const close = useCallback(() => setVisible(false), [])\n \n return (\n <DatePickerCore\n {...rest}\n CalendarComponent={Calendar}\n requestShowCalendar={show}\n requestCloseCalendar={close}\n renderCalendar={(calendar) => (\n <Modal animationType='fade' visible={visible} onRequestClose={close}>\n {calendar}\n </Modal>\n )}\n />\n );\n};"],"file":"DatePicker.js"}
1
+ {"version":3,"sources":["../../../../src/components/molecules/DatePicker/DatePicker.tsx"],"names":["DatePicker","value","type","rest","visible","setVisible","show","close","getYear","lowest","undefined","Date","getFullYear","getMonth","Calendar","calendar"],"mappings":";;;;;;;AAAA;;AAOA;;AACA;;;;;;;;AAUO,MAAMA,UAAU,GAAG,CAA0B;AAClDC,EAAAA,KADkD;AAElDC,EAAAA,IAFkD;AAGlD,KAAGC;AAH+C,CAA1B,KAIgB;AACxC,QAAM,CAACC,OAAD,EAAUC,UAAV,IAAwB,qBAAS,KAAT,CAA9B;AACA,QAAMC,IAAI,GAAG,wBAAY,MAAMD,UAAU,CAAC,IAAD,CAA5B,EAAoC,EAApC,CAAb;AACA,QAAME,KAAK,GAAG,wBAAY,MAAMF,UAAU,CAAC,KAAD,CAA5B,EAAqC,EAArC,CAAd;AAEA,QAAMG,OAAO,GAAG,oBAAQ,MAAM;AAC5B,QAAIP,KAAJ,EAAW;AACT,UAAIC,IAAI,KAAK,OAAb,EAAsB;AACpB,YAAKD,KAAD,CAAqBQ,MAArB,KAAgCC,SAApC,EACE,OAAO,IAAIC,IAAJ,CAAUV,KAAD,CAAqBQ,MAA9B,EAAsCG,WAAtC,EAAP;AACH,OAHD,MAGO;AACL,eAAO,IAAID,IAAJ,CAASV,KAAT,EAAwBW,WAAxB,EAAP;AACD;AACF;;AACD,WAAOF,SAAP;AACD,GAVe,EAUb,CAACT,KAAD,CAVa,CAAhB;AAYA,QAAMY,QAAQ,GAAG,oBAAQ,MAAM;AAC7B,QAAIZ,KAAJ,EAAW;AACT,UAAIC,IAAI,KAAK,OAAb,EAAsB;AACpB,YAAKD,KAAD,CAAqBQ,MAArB,KAAgCC,SAApC,EACE,OAAO,IAAIC,IAAJ,CAAUV,KAAD,CAAqBQ,MAA9B,EAAsCI,QAAtC,EAAP;AACH,OAHD,MAGO;AACL,eAAO,IAAIF,IAAJ,CAASV,KAAT,EAAwBY,QAAxB,EAAP;AACD;AACF;;AACD,WAAOH,SAAP;AACD,GAVgB,EAUd,CAACT,KAAD,CAVc,CAAjB;AAYA,SACE,6BAAC,qBAAD,eACME,IADN;AAEE,IAAA,iBAAiB,EAAEW,mBAFrB;AAGE,IAAA,KAAK,EAAEb,KAHT;AAIE,IAAA,IAAI,EAAEC,IAJR;AAKE,IAAA,IAAI,EAAEM,OALR;AAME,IAAA,KAAK,EAAEK,QANT;AAOE,IAAA,mBAAmB,EAAEP,IAPvB;AAQE,IAAA,oBAAoB,EAAEC,KARxB;AASE,IAAA,cAAc,EAAEQ,QAAQ,IACtB,6BAAC,kBAAD;AAAU,MAAA,OAAO,EAAEX,OAAnB;AAA4B,MAAA,UAAU,EAAEC;AAAxC,OACGU,QADH;AAVJ,KADF;AAiBD,CAlDM","sourcesContent":["import {\n Calendar,\n DatePicker as DatePickerCore,\n DatePickerProps,\n DateRange,\n SelectionType,\n} from '@tecsinapse/react-core';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { Dropdown } from '../../atoms/Dropdown';\n\nexport type WebDatePickerProps<T extends SelectionType> = Omit<\n DatePickerProps<T>,\n | 'CalendarComponent'\n | 'renderCalendar'\n | 'requestCloseCalendar'\n | 'requestShowCalendar'\n>;\n\nexport const DatePicker = <T extends SelectionType>({\n value,\n type,\n ...rest\n}: WebDatePickerProps<T>): JSX.Element => {\n const [visible, setVisible] = useState(false);\n const show = useCallback(() => setVisible(true), []);\n const close = useCallback(() => setVisible(false), []);\n\n const getYear = useMemo(() => {\n if (value) {\n if (type === 'range') {\n if ((value as DateRange).lowest !== undefined)\n return new Date((value as DateRange).lowest).getFullYear();\n } else {\n return new Date(value as Date).getFullYear();\n }\n }\n return undefined;\n }, [value]);\n\n const getMonth = useMemo(() => {\n if (value) {\n if (type === 'range') {\n if ((value as DateRange).lowest !== undefined)\n return new Date((value as DateRange).lowest).getMonth();\n } else {\n return new Date(value as Date).getMonth();\n }\n }\n return undefined;\n }, [value]);\n\n return (\n <DatePickerCore\n {...rest}\n CalendarComponent={Calendar}\n value={value}\n type={type}\n year={getYear}\n month={getMonth}\n requestShowCalendar={show}\n requestCloseCalendar={close}\n renderCalendar={calendar => (\n <Dropdown visible={visible} setVisible={setVisible}>\n {calendar}\n </Dropdown>\n )}\n />\n );\n};\n"],"file":"DatePicker.js"}
@@ -9,7 +9,7 @@ var _reactCore = require("@tecsinapse/react-core");
9
9
 
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
 
12
- var _Modal = require("./Modal");
12
+ var _Dropdown = require("../../atoms/Dropdown");
13
13
 
14
14
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
15
 
@@ -25,10 +25,9 @@ const DateTimePicker = ({ ...rest
25
25
  return _react.default.createElement(_reactCore.DateTimePicker, _extends({}, rest, {
26
26
  requestShowSelector: show,
27
27
  requestCloseSelector: close,
28
- renderSelector: selector => _react.default.createElement(_Modal.Modal, {
29
- animationType: "fade",
28
+ renderSelector: selector => _react.default.createElement(_Dropdown.Dropdown, {
30
29
  visible: visible,
31
- onRequestClose: close
30
+ setVisible: setVisible
32
31
  }, selector)
33
32
  }));
34
33
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/molecules/DateTimePicker/DateTimePicker.tsx"],"names":["DateTimePicker","rest","visible","setVisible","show","close","selector"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;;;;;;;AAKO,MAAMA,cAA0C,GAAG,CAAC,EAAE,GAAGC;AAAL,CAAD,KAAiB;AAEvE,QAAM,CAAEC,OAAF,EAAWC,UAAX,IAA0B,qBAAS,KAAT,CAAhC;AACA,QAAMC,IAAI,GAAG,wBAAY,MAAMD,UAAU,CAAC,IAAD,CAA5B,EAAoC,EAApC,CAAb;AACA,QAAME,KAAK,GAAG,wBAAY,MAAMF,UAAU,CAAC,KAAD,CAA5B,EAAqC,EAArC,CAAd;AAEA,SACI,6BAAC,yBAAD,eACQF,IADR;AAEI,IAAA,mBAAmB,EAAEG,IAFzB;AAGI,IAAA,oBAAoB,EAAEC,KAH1B;AAII,IAAA,cAAc,EAAGC,QAAD,IACZ,6BAAC,YAAD;AAAO,MAAA,aAAa,EAAC,MAArB;AAA4B,MAAA,OAAO,EAAEJ,OAArC;AAA8C,MAAA,cAAc,EAAEG;AAA9D,OACKC,QADL;AALR,KADJ;AAYH,CAlBM","sourcesContent":["import {\n DateTimePicker as DateTimePickerCore,\n DateTimePickerProps\n} from '@tecsinapse/react-core';\nimport React, { FC, useCallback, useState } from 'react';\nimport { Modal } from './Modal';\n\n\nexport type WebDateTimePickerProps = Omit<DateTimePickerProps, 'renderSelector' | 'requestShowSelector' | 'requestCloseSelector'>\n\nexport const DateTimePicker: FC<WebDateTimePickerProps> = ({ ...rest }) => {\n\n const [ visible, setVisible ] = useState(false)\n const show = useCallback(() => setVisible(true), [])\n const close = useCallback(() => setVisible(false), [])\n\n return (\n <DateTimePickerCore\n {...rest}\n requestShowSelector={show}\n requestCloseSelector={close}\n renderSelector={(selector) => (\n <Modal animationType='fade' visible={visible} onRequestClose={close}>\n {selector}\n </Modal>\n )}\n />\n );\n};\n"],"file":"DateTimePicker.js"}
1
+ {"version":3,"sources":["../../../../src/components/molecules/DateTimePicker/DateTimePicker.tsx"],"names":["DateTimePicker","rest","visible","setVisible","show","close","selector"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;;;;;;;AAOO,MAAMA,cAA0C,GAAG,CAAC,EAAE,GAAGC;AAAL,CAAD,KAAiB;AACzE,QAAM,CAACC,OAAD,EAAUC,UAAV,IAAwB,qBAAkB,KAAlB,CAA9B;AAEA,QAAMC,IAAI,GAAG,wBAAY,MAAMD,UAAU,CAAC,IAAD,CAA5B,EAAoC,EAApC,CAAb;AACA,QAAME,KAAK,GAAG,wBAAY,MAAMF,UAAU,CAAC,KAAD,CAA5B,EAAqC,EAArC,CAAd;AAEA,SACE,6BAAC,yBAAD,eACMF,IADN;AAEE,IAAA,mBAAmB,EAAEG,IAFvB;AAGE,IAAA,oBAAoB,EAAEC,KAHxB;AAIE,IAAA,cAAc,EAAEC,QAAQ,IACtB,6BAAC,kBAAD;AAAU,MAAA,OAAO,EAAEJ,OAAnB;AAA4B,MAAA,UAAU,EAAEC;AAAxC,OACGG,QADH;AALJ,KADF;AAYD,CAlBM","sourcesContent":["import {\n DateTimePicker as DateTimePickerCore,\n DateTimePickerProps,\n} from '@tecsinapse/react-core';\nimport React, { FC, useCallback, useState } from 'react';\nimport { Dropdown } from '../../atoms/Dropdown';\n\nexport type WebDateTimePickerProps = Omit<\n DateTimePickerProps,\n 'renderSelector' | 'requestShowSelector' | 'requestCloseSelector'\n>;\n\nexport const DateTimePicker: FC<WebDateTimePickerProps> = ({ ...rest }) => {\n const [visible, setVisible] = useState<boolean>(false);\n\n const show = useCallback(() => setVisible(true), []);\n const close = useCallback(() => setVisible(false), []);\n\n return (\n <DateTimePickerCore\n {...rest}\n requestShowSelector={show}\n requestCloseSelector={close}\n renderSelector={selector => (\n <Dropdown visible={visible} setVisible={setVisible}>\n {selector}\n </Dropdown>\n )}\n />\n );\n};\n"],"file":"DateTimePicker.js"}
@@ -7,7 +7,7 @@ interface SelectItemProps<Data, Type extends 'single' | 'multi'> {
7
7
  labelExtractor: (t: Data) => string;
8
8
  index: number;
9
9
  }
10
- declare const _default: <Data, Type extends "single" | "multi">({ item, onSelect, type, value, labelExtractor, setDropDownVisible, checkedAll, setCheckedAll, lenghtOptions, }: SelectItemProps<Data, Type> & {
10
+ declare const _default: <Data, Type extends "single" | "multi">({ item, onSelect, type, value, labelExtractor, setDropDownVisible, checkedAll, setCheckedAll, lenghtOptions, keyExtractor, }: SelectItemProps<Data, Type> & {
11
11
  setDropDownVisible: (t: boolean) => void;
12
12
  checkedAll: boolean;
13
13
  setCheckedAll: (t: boolean) => void;
@@ -22,15 +22,20 @@ const SelectItem = ({
22
22
  setDropDownVisible,
23
23
  checkedAll,
24
24
  setCheckedAll,
25
- lenghtOptions
25
+ lenghtOptions,
26
+ keyExtractor
26
27
  }) => {
27
28
  const isMulti = type === 'multi';
28
29
 
29
- const [checked, setChecked] = _react.default.useState(value !== undefined && type === 'multi' && value.includes(item));
30
+ const [checked, setChecked] = _react.default.useState(value !== undefined && type === 'multi' && value.find(data => keyExtractor(data) === keyExtractor(item)) !== undefined);
31
+
32
+ _react.default.useEffect(() => {
33
+ if (!checked && value !== undefined && (type === 'multi' && value.find(data => keyExtractor(data) === keyExtractor(item)) || type === 'single' && keyExtractor(value) === keyExtractor(item))) setChecked(true);
34
+ }, [value, keyExtractor, type]);
30
35
 
31
36
  _react.default.useEffect(() => {
32
37
  if (type === 'multi') {
33
- checkedAll ? setChecked(true) : setChecked(value.includes(item));
38
+ checkedAll ? setChecked(true) : setChecked(value.find(data => keyExtractor(data) === keyExtractor(item)) !== undefined);
34
39
  }
35
40
  }, [checkedAll]);
36
41
 
@@ -46,7 +51,7 @@ const SelectItem = ({
46
51
  [..._value, key].length === lenghtOptions && setCheckedAll(true);
47
52
  } else {
48
53
  const auxArray = [..._value];
49
- const indexToExclude = auxArray.indexOf(key);
54
+ const indexToExclude = auxArray.findIndex(data => keyExtractor(data) === keyExtractor(key));
50
55
  auxArray.splice(indexToExclude, 1);
51
56
  onSelect([...auxArray]);
52
57
  setCheckedAll(false);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/molecules/Select/SelectItem/SelectItem.tsx"],"names":["SelectItem","item","onSelect","type","value","labelExtractor","setDropDownVisible","checkedAll","setCheckedAll","lenghtOptions","isMulti","checked","setChecked","React","useState","undefined","includes","useEffect","clickItem","useCallback","_value","key","Array","isArray","auxChecked","length","auxArray","indexToExclude","indexOf","splice","memo"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAkBA,MAAMA,UAAU,GAAG,CAAwC;AACzDC,EAAAA,IADyD;AAEzDC,EAAAA,QAFyD;AAGzDC,EAAAA,IAHyD;AAIzDC,EAAAA,KAJyD;AAKzDC,EAAAA,cALyD;AAMzDC,EAAAA,kBANyD;AAOzDC,EAAAA,UAPyD;AAQzDC,EAAAA,aARyD;AASzDC,EAAAA;AATyD,CAAxC,KAeA;AACjB,QAAMC,OAAO,GAAGP,IAAI,KAAK,OAAzB;;AACA,QAAM,CAACQ,OAAD,EAAUC,UAAV,IAAwBC,eAAMC,QAAN,CAC5BV,KAAK,KAAKW,SAAV,IAAuBZ,IAAI,KAAK,OAAhC,IAA4CC,KAAD,CAAkBY,QAAlB,CAA2Bf,IAA3B,CADf,CAA9B;;AAGAY,iBAAMI,SAAN,CAAgB,MAAM;AACpB,QAAId,IAAI,KAAK,OAAb,EAAsB;AACpBI,MAAAA,UAAU,GACNK,UAAU,CAAC,IAAD,CADJ,GAENA,UAAU,CAAER,KAAD,CAAkBY,QAAlB,CAA2Bf,IAA3B,CAAD,CAFd;AAGD;AACF,GAND,EAMG,CAACM,UAAD,CANH;;AAQA,QAAMW,SAAS,GAAGL,eAAMM,WAAN,CAChB,CAAClB,IAAD,EAAOmB,MAAP,KAAkB;AAGhB,UAAMC,GAAS,GAAGpB,IAAlB;;AACA,QAAIqB,KAAK,CAACC,OAAN,CAAcH,MAAd,CAAJ,EAA2B;AACzB,YAAMI,UAAU,GAAG,CAACb,OAApB;AACAC,MAAAA,UAAU,CAAC,CAACD,OAAF,CAAV;;AACA,UAAIa,UAAJ,EAAgB;AACdtB,QAAAA,QAAQ,CAAC,CAAC,GAAGkB,MAAJ,EAAYC,GAAZ,CAAD,CAAR;AACA,SAAC,GAAGD,MAAJ,EAAYC,GAAZ,EAAiBI,MAAjB,KAA4BhB,aAA5B,IAA6CD,aAAa,CAAC,IAAD,CAA1D;AACD,OAHD,MAGO;AACL,cAAMkB,QAAgB,GAAG,CAAC,GAAGN,MAAJ,CAAzB;AACA,cAAMO,cAAc,GAAGD,QAAQ,CAACE,OAAT,CAAiBP,GAAjB,CAAvB;AACAK,QAAAA,QAAQ,CAACG,MAAT,CAAgBF,cAAhB,EAAgC,CAAhC;AACAzB,QAAAA,QAAQ,CAAC,CAAC,GAAGwB,QAAJ,CAAD,CAAR;AACAlB,QAAAA,aAAa,CAAC,KAAD,CAAb;AACD;AACF,KAbD,MAaO;AACLN,MAAAA,QAAQ,CAACmB,GAAD,CAAR;AACAf,MAAAA,kBAAkB,CAAC,KAAD,CAAlB;AACD;AACF,GAtBe,EAuBhB,CAACJ,QAAD,EAAWI,kBAAX,EAA+BE,aAA/B,EAA8CI,UAA9C,EAA0DD,OAA1D,CAvBgB,CAAlB;;AA0BA,SACE,6BAAC,2BAAD;AAAqB,IAAA,OAAO,EAAE,MAAMO,SAAS,CAACjB,IAAD,EAAOG,KAAP;AAA7C,KACGM,OAAO,IACN,6BAAC,mBAAD;AAAU,IAAA,OAAO,EAAEC,OAAnB;AAA4B,IAAA,QAAQ,EAAE,MAAMO,SAAS,CAACjB,IAAD,EAAOG,KAAP;AAArD,IAFJ,EAIE,6BAAC,gCAAD,QACE,6BAAC,eAAD;AAAM,IAAA,UAAU,EAAC,MAAjB;AAAwB,IAAA,aAAa,EAAC,MAAtC;AAA6C,IAAA,aAAa,EAAE;AAA5D,KACE,6BAAC,kBAAD;AAAY,IAAA,cAAc,EAAED,IAAI,KAAK,QAAT,IAAqBC,KAAK,KAAKH;AAA3D,KACGI,cAAc,CAACJ,IAAD,CADjB,CADF,CADF,CAJF,CADF;AAcD,CApED;;eAsEeY,eAAMiB,IAAN,CAAW9B,UAAX,C","sourcesContent":["import React from 'react';\nimport { Checkbox, Text } from '@tecsinapse/react-core';\nimport {\n ContainerItemSelect,\n StyledContainerTextLabel,\n StyledSpan,\n} from './styled';\n\ninterface SelectItemProps<Data, Type extends 'single' | 'multi'> {\n item: Data;\n type: Type;\n value: Type extends 'single' ? Data | undefined : Data[];\n onSelect: (\n option: Type extends 'single' ? Data | undefined : Data[]\n ) => never | void;\n keyExtractor: (t: Data, index?: number) => string;\n labelExtractor: (t: Data) => string;\n index: number;\n}\n\nconst SelectItem = <Data, Type extends 'single' | 'multi'>({\n item,\n onSelect,\n type,\n value,\n labelExtractor,\n setDropDownVisible,\n checkedAll,\n setCheckedAll,\n lenghtOptions,\n}: SelectItemProps<Data, Type> & {\n setDropDownVisible: (t: boolean) => void;\n checkedAll: boolean;\n setCheckedAll: (t: boolean) => void;\n lenghtOptions: number;\n}): JSX.Element => {\n const isMulti = type === 'multi';\n const [checked, setChecked] = React.useState<boolean>(\n value !== undefined && type === 'multi' && (value as Data[]).includes(item)\n );\n React.useEffect(() => {\n if (type === 'multi') {\n checkedAll\n ? setChecked(true)\n : setChecked((value as Data[]).includes(item));\n }\n }, [checkedAll]);\n\n const clickItem = React.useCallback(\n (item, _value) => {\n // TS Workaround since TS won't infer the ternary operator's result type correctly\n type OnSelectArg = Parameters<typeof onSelect>[0];\n const key: Data = item;\n if (Array.isArray(_value)) {\n const auxChecked = !checked;\n setChecked(!checked);\n if (auxChecked) {\n onSelect([..._value, key] as OnSelectArg);\n [..._value, key].length === lenghtOptions && setCheckedAll(true);\n } else {\n const auxArray: Data[] = [..._value];\n const indexToExclude = auxArray.indexOf(key);\n auxArray.splice(indexToExclude, 1);\n onSelect([...auxArray] as OnSelectArg);\n setCheckedAll(false);\n }\n } else {\n onSelect(key as OnSelectArg);\n setDropDownVisible(false);\n }\n },\n [onSelect, setDropDownVisible, setCheckedAll, setChecked, checked]\n );\n\n return (\n <ContainerItemSelect onClick={() => clickItem(item, value)}>\n {isMulti && (\n <Checkbox checked={checked} onChange={() => clickItem(item, value)} />\n )}\n <StyledContainerTextLabel>\n <Text fontWeight=\"bold\" ellipsizeMode=\"tail\" numberOfLines={1}>\n <StyledSpan singleHighligh={type === 'single' && value === item}>\n {labelExtractor(item)}\n </StyledSpan>\n </Text>\n </StyledContainerTextLabel>\n </ContainerItemSelect>\n );\n};\n\nexport default React.memo(SelectItem) as typeof SelectItem;\n"],"file":"SelectItem.js"}
1
+ {"version":3,"sources":["../../../../../src/components/molecules/Select/SelectItem/SelectItem.tsx"],"names":["SelectItem","item","onSelect","type","value","labelExtractor","setDropDownVisible","checkedAll","setCheckedAll","lenghtOptions","keyExtractor","isMulti","checked","setChecked","React","useState","undefined","find","data","useEffect","clickItem","useCallback","_value","key","Array","isArray","auxChecked","length","auxArray","indexToExclude","findIndex","splice","memo"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAkBA,MAAMA,UAAU,GAAG,CAAwC;AACzDC,EAAAA,IADyD;AAEzDC,EAAAA,QAFyD;AAGzDC,EAAAA,IAHyD;AAIzDC,EAAAA,KAJyD;AAKzDC,EAAAA,cALyD;AAMzDC,EAAAA,kBANyD;AAOzDC,EAAAA,UAPyD;AAQzDC,EAAAA,aARyD;AASzDC,EAAAA,aATyD;AAUzDC,EAAAA;AAVyD,CAAxC,KAgBA;AACjB,QAAMC,OAAO,GAAGR,IAAI,KAAK,OAAzB;;AACA,QAAM,CAACS,OAAD,EAAUC,UAAV,IAAwBC,eAAMC,QAAN,CAC5BX,KAAK,KAAKY,SAAV,IACEb,IAAI,KAAK,OADX,IAEGC,KAAD,CAAkBa,IAAlB,CACEC,IAAI,IAAIR,YAAY,CAACQ,IAAD,CAAZ,KAAuBR,YAAY,CAACT,IAAD,CAD7C,MAEMe,SALoB,CAA9B;;AAQAF,iBAAMK,SAAN,CAAgB,MAAM;AACpB,QACE,CAACP,OAAD,IACAR,KAAK,KAAKY,SADV,KAEEb,IAAI,KAAK,OAAT,IACCC,KAAD,CAAkBa,IAAlB,CACEC,IAAI,IAAIR,YAAY,CAACQ,IAAD,CAAZ,KAAuBR,YAAY,CAACT,IAAD,CAD7C,CADD,IAIEE,IAAI,KAAK,QAAT,IACCO,YAAY,CAACN,KAAD,CAAZ,KAAgCM,YAAY,CAACT,IAAD,CAPhD,CADF,EAUEY,UAAU,CAAC,IAAD,CAAV;AACH,GAZD,EAYG,CAACT,KAAD,EAAQM,YAAR,EAAsBP,IAAtB,CAZH;;AAcAW,iBAAMK,SAAN,CAAgB,MAAM;AACpB,QAAIhB,IAAI,KAAK,OAAb,EAAsB;AACpBI,MAAAA,UAAU,GACNM,UAAU,CAAC,IAAD,CADJ,GAENA,UAAU,CACPT,KAAD,CAAkBa,IAAlB,CACEC,IAAI,IAAIR,YAAY,CAACQ,IAAD,CAAZ,KAAuBR,YAAY,CAACT,IAAD,CAD7C,MAEMe,SAHE,CAFd;AAOD;AACF,GAVD,EAUG,CAACT,UAAD,CAVH;;AAYA,QAAMa,SAAS,GAAGN,eAAMO,WAAN,CAChB,CAACpB,IAAD,EAAOqB,MAAP,KAAkB;AAGhB,UAAMC,GAAS,GAAGtB,IAAlB;;AACA,QAAIuB,KAAK,CAACC,OAAN,CAAcH,MAAd,CAAJ,EAA2B;AACzB,YAAMI,UAAU,GAAG,CAACd,OAApB;AACAC,MAAAA,UAAU,CAAC,CAACD,OAAF,CAAV;;AACA,UAAIc,UAAJ,EAAgB;AACdxB,QAAAA,QAAQ,CAAC,CAAC,GAAGoB,MAAJ,EAAYC,GAAZ,CAAD,CAAR;AACA,SAAC,GAAGD,MAAJ,EAAYC,GAAZ,EAAiBI,MAAjB,KAA4BlB,aAA5B,IAA6CD,aAAa,CAAC,IAAD,CAA1D;AACD,OAHD,MAGO;AACL,cAAMoB,QAAgB,GAAG,CAAC,GAAGN,MAAJ,CAAzB;AACA,cAAMO,cAAc,GAAGD,QAAQ,CAACE,SAAT,CACrBZ,IAAI,IAAIR,YAAY,CAACQ,IAAD,CAAZ,KAAuBR,YAAY,CAACa,GAAD,CADtB,CAAvB;AAGAK,QAAAA,QAAQ,CAACG,MAAT,CAAgBF,cAAhB,EAAgC,CAAhC;AACA3B,QAAAA,QAAQ,CAAC,CAAC,GAAG0B,QAAJ,CAAD,CAAR;AACApB,QAAAA,aAAa,CAAC,KAAD,CAAb;AACD;AACF,KAfD,MAeO;AACLN,MAAAA,QAAQ,CAACqB,GAAD,CAAR;AACAjB,MAAAA,kBAAkB,CAAC,KAAD,CAAlB;AACD;AACF,GAxBe,EAyBhB,CAACJ,QAAD,EAAWI,kBAAX,EAA+BE,aAA/B,EAA8CK,UAA9C,EAA0DD,OAA1D,CAzBgB,CAAlB;;AA4BA,SACE,6BAAC,2BAAD;AAAqB,IAAA,OAAO,EAAE,MAAMQ,SAAS,CAACnB,IAAD,EAAOG,KAAP;AAA7C,KACGO,OAAO,IACN,6BAAC,mBAAD;AAAU,IAAA,OAAO,EAAEC,OAAnB;AAA4B,IAAA,QAAQ,EAAE,MAAMQ,SAAS,CAACnB,IAAD,EAAOG,KAAP;AAArD,IAFJ,EAIE,6BAAC,gCAAD,QACE,6BAAC,eAAD;AAAM,IAAA,UAAU,EAAC,MAAjB;AAAwB,IAAA,aAAa,EAAC,MAAtC;AAA6C,IAAA,aAAa,EAAE;AAA5D,KACE,6BAAC,kBAAD;AAAY,IAAA,cAAc,EAAED,IAAI,KAAK,QAAT,IAAqBC,KAAK,KAAKH;AAA3D,KACGI,cAAc,CAACJ,IAAD,CADjB,CADF,CADF,CAJF,CADF;AAcD,CA9FD;;eAgGea,eAAMkB,IAAN,CAAWhC,UAAX,C","sourcesContent":["import React from 'react';\nimport { Checkbox, Text } from '@tecsinapse/react-core';\nimport {\n ContainerItemSelect,\n StyledContainerTextLabel,\n StyledSpan,\n} from './styled';\n\ninterface SelectItemProps<Data, Type extends 'single' | 'multi'> {\n item: Data;\n type: Type;\n value: Type extends 'single' ? Data | undefined : Data[];\n onSelect: (\n option: Type extends 'single' ? Data | undefined : Data[]\n ) => never | void;\n keyExtractor: (t: Data, index?: number) => string;\n labelExtractor: (t: Data) => string;\n index: number;\n}\n\nconst SelectItem = <Data, Type extends 'single' | 'multi'>({\n item,\n onSelect,\n type,\n value,\n labelExtractor,\n setDropDownVisible,\n checkedAll,\n setCheckedAll,\n lenghtOptions,\n keyExtractor,\n}: SelectItemProps<Data, Type> & {\n setDropDownVisible: (t: boolean) => void;\n checkedAll: boolean;\n setCheckedAll: (t: boolean) => void;\n lenghtOptions: number;\n}): JSX.Element => {\n const isMulti = type === 'multi';\n const [checked, setChecked] = React.useState<boolean>(\n value !== undefined &&\n type === 'multi' &&\n (value as Data[]).find(\n data => keyExtractor(data) === keyExtractor(item)\n ) !== undefined\n );\n\n React.useEffect(() => {\n if (\n !checked &&\n value !== undefined &&\n ((type === 'multi' &&\n (value as Data[]).find(\n data => keyExtractor(data) === keyExtractor(item)\n )) ||\n (type === 'single' &&\n keyExtractor(value as Data) === keyExtractor(item)))\n )\n setChecked(true);\n }, [value, keyExtractor, type]);\n\n React.useEffect(() => {\n if (type === 'multi') {\n checkedAll\n ? setChecked(true)\n : setChecked(\n (value as Data[]).find(\n data => keyExtractor(data) === keyExtractor(item)\n ) !== undefined\n );\n }\n }, [checkedAll]);\n\n const clickItem = React.useCallback(\n (item, _value) => {\n // TS Workaround since TS won't infer the ternary operator's result type correctly\n type OnSelectArg = Parameters<typeof onSelect>[0];\n const key: Data = item;\n if (Array.isArray(_value)) {\n const auxChecked = !checked;\n setChecked(!checked);\n if (auxChecked) {\n onSelect([..._value, key] as OnSelectArg);\n [..._value, key].length === lenghtOptions && setCheckedAll(true);\n } else {\n const auxArray: Data[] = [..._value];\n const indexToExclude = auxArray.findIndex(\n data => keyExtractor(data) === keyExtractor(key)\n );\n auxArray.splice(indexToExclude, 1);\n onSelect([...auxArray] as OnSelectArg);\n setCheckedAll(false);\n }\n } else {\n onSelect(key as OnSelectArg);\n setDropDownVisible(false);\n }\n },\n [onSelect, setDropDownVisible, setCheckedAll, setChecked, checked]\n );\n\n return (\n <ContainerItemSelect onClick={() => clickItem(item, value)}>\n {isMulti && (\n <Checkbox checked={checked} onChange={() => clickItem(item, value)} />\n )}\n <StyledContainerTextLabel>\n <Text fontWeight=\"bold\" ellipsizeMode=\"tail\" numberOfLines={1}>\n <StyledSpan singleHighligh={type === 'single' && value === item}>\n {labelExtractor(item)}\n </StyledSpan>\n </Text>\n </StyledContainerTextLabel>\n </ContainerItemSelect>\n );\n};\n\nexport default React.memo(SelectItem) as typeof SelectItem;\n"],"file":"SelectItem.js"}
@@ -45,14 +45,16 @@ const SelectContainer = (0, _styled.default)('div')`
45
45
  }) => theme.spacing.deca};
46
46
  `;
47
47
  exports.SelectContainer = SelectContainer;
48
- const NavigationButton = (0, _native.default)(_Button.Button)`
49
- padding: ${({
50
- theme
51
- }) => theme.spacing.centi};
48
+ const NavigationButton = (0, _native.default)(_Button.Button)`
52
49
  border-radius: ${({
53
50
  theme
54
51
  }) => theme.borderRadius.mili};
52
+ height: 44px;
55
53
  justify-content: center;
54
+ padding: ${({
55
+ theme
56
+ }) => theme.spacing.centi};
57
+ width: 44px;
56
58
  `;
57
59
  exports.NavigationButton = NavigationButton;
58
60
  const PageButton = (0, _native.default)(NavigationButton)`
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/components/organisms/DataGrid/Footer/styled.ts"],"names":["TdFooterStyled","Td","theme","spacing","centi","FlexContainer","FooterContainer","FooterContainerStart","FooterContainerEnd","SelectContainer","deca","NavigationButton","Button","borderRadius","mili","PageButton","micro","PagesContainer","HoveredText","font","color","light"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEO,MAAMA,cAAc,GAAG,qBAAOC,SAAP,CAAgC;AAC9D,aAAa,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcC,KAAM;AAChD,CAFO;;AAIA,MAAMC,aAAa,GAAG,qBAAO,KAAP,CAAc;AAC3C;AACA;AACA,CAHO;;AAKA,MAAMC,eAAe,GAAG,qBAAOD,aAAP,CAAsB;AACrD;AACA;AACA,CAHO;;AAKA,MAAME,oBAAoB,GAAG,qBAAOF,aAAP,CAAsB;AAC1D;AACA,CAFO;;AAIA,MAAMG,kBAAkB,GAAG,qBAAOH,aAAP,CAAsB;AACxD;AACA,CAFO;;AAIA,MAAMI,eAAe,GAAG,qBAAO,KAAP,CAAmC;AAClE,kBAAkB,CAAC;AAAEP,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcO,IAAK;AACpD,CAFO;;AAIA,MAAMC,gBAAgB,GAAG,qBAAaC,cAAb,CAA0C;AAC1E,eAAe,CAAC;AAAEV,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcC,KAAM;AAClD,qBAAqB,CAAC;AAAEF,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACW,YAAN,CAAmBC,IAAK;AAC5D;AACA,CAJO;;AAOA,MAAMC,UAAU,GAAG,qBAAaJ,gBAAb,CAAoD;AAC9E,qBAAqB,CAAC;AAAET,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcO,IAAK;AACvD,oBAAoB,CAAC;AAAER,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcO,IAAK;AACtD,qBAAqB,CAAC;AAAER,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACW,YAAN,CAAmBC,IAAK;AAC5D;AACA,mBAAmB,CAAC;AAAEZ,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAca,KAAM;AACtD,oBAAoB,CAAC;AAAEd,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAca,KAAM;AACvD,CAPO;;AASA,MAAMC,cAAc,GAAG,qBAAO,KAAP,CAAmC;AACjE;AACA;AACA,CAHO;;AAKA,MAAMC,WAAW,GAAG,qBAAO,KAAP,CAAmC;AAC9D;AACA;AACA,aAAa,CAAC;AAAEhB,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACiB,IAAN,CAAWC,KAAX,CAAiBC,KAAM;AACnD;AACA,CALO","sourcesContent":["import styled from '@emotion/styled';\nimport { default as nativeStyled } from '@emotion/native';\nimport { StyleProps } from '@tecsinapse/react-core';\nimport { Td } from '../../../atoms/Table';\nimport { Button } from '../../../atoms/Button';\n\nexport const TdFooterStyled = styled(Td)<Partial<StyleProps>>`\n padding: ${({ theme }) => theme.spacing.centi} 0 0 0;\n`;\n\nexport const FlexContainer = styled('div')`\n display: flex;\n flex-grow: 1;\n`;\n\nexport const FooterContainer = styled(FlexContainer)`\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const FooterContainerStart = styled(FlexContainer)`\n justify-content: flex-start;\n`;\n\nexport const FooterContainerEnd = styled(FlexContainer)`\n justify-content: flex-end;\n`;\n\nexport const SelectContainer = styled('div')<Partial<StyleProps>>`\n margin-right: ${({ theme }) => theme.spacing.deca};\n`;\n\nexport const NavigationButton = nativeStyled(Button)<Partial<StyleProps>>`\n padding: ${({ theme }) => theme.spacing.centi};\n border-radius: ${({ theme }) => theme.borderRadius.mili};\n justify-content: center;\n`;\n\n// Se o botão estiver ativo, renderizar outlined, caso contrario o botão é text\nexport const PageButton = nativeStyled(NavigationButton)<Partial<StyleProps>>`\n padding-right: ${({ theme }) => theme.spacing.deca};\n padding-left: ${({ theme }) => theme.spacing.deca};\n border-radius: ${({ theme }) => theme.borderRadius.mili};\n justify-content: center;\n margin-left: ${({ theme }) => theme.spacing.micro};\n margin-right: ${({ theme }) => theme.spacing.micro};\n`;\n\nexport const PagesContainer = styled('div')<Partial<StyleProps>>`\n margin: 0 20px;\n display: flex;\n`;\n\nexport const HoveredText = styled('div')<Partial<StyleProps>>`\n user-select: none;\n &:hover * {\n color: ${({ theme }) => theme.font.color.light};\n }\n`;\n"],"file":"styled.js"}
1
+ {"version":3,"sources":["../../../../../src/components/organisms/DataGrid/Footer/styled.ts"],"names":["TdFooterStyled","Td","theme","spacing","centi","FlexContainer","FooterContainer","FooterContainerStart","FooterContainerEnd","SelectContainer","deca","NavigationButton","Button","borderRadius","mili","PageButton","micro","PagesContainer","HoveredText","font","color","light"],"mappings":";;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;AAEO,MAAMA,cAAc,GAAG,qBAAOC,SAAP,CAAgC;AAC9D,aAAa,CAAC;AAAEC,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcC,KAAM;AAChD,CAFO;;AAIA,MAAMC,aAAa,GAAG,qBAAO,KAAP,CAAc;AAC3C;AACA;AACA,CAHO;;AAKA,MAAMC,eAAe,GAAG,qBAAOD,aAAP,CAAsB;AACrD;AACA;AACA,CAHO;;AAKA,MAAME,oBAAoB,GAAG,qBAAOF,aAAP,CAAsB;AAC1D;AACA,CAFO;;AAIA,MAAMG,kBAAkB,GAAG,qBAAOH,aAAP,CAAsB;AACxD;AACA,CAFO;;AAIA,MAAMI,eAAe,GAAG,qBAAO,KAAP,CAAmC;AAClE,kBAAkB,CAAC;AAAEP,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcO,IAAK;AACpD,CAFO;;AAIA,MAAMC,gBAAgB,GAAG,qBAAaC,cAAb,CAA0C;AAC1E,qBAAqB,CAAC;AAAEV,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACW,YAAN,CAAmBC,IAAK;AAC5D;AACA;AACA,eAAe,CAAC;AAAEZ,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcC,KAAM;AAClD;AACA,CANO;;AASA,MAAMW,UAAU,GAAG,qBAAaJ,gBAAb,CAAoD;AAC9E,qBAAqB,CAAC;AAAET,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcO,IAAK;AACvD,oBAAoB,CAAC;AAAER,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAcO,IAAK;AACtD,qBAAqB,CAAC;AAAER,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACW,YAAN,CAAmBC,IAAK;AAC5D;AACA,mBAAmB,CAAC;AAAEZ,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAca,KAAM;AACtD,oBAAoB,CAAC;AAAEd,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACC,OAAN,CAAca,KAAM;AACvD,CAPO;;AASA,MAAMC,cAAc,GAAG,qBAAO,KAAP,CAAmC;AACjE;AACA;AACA,CAHO;;AAKA,MAAMC,WAAW,GAAG,qBAAO,KAAP,CAAmC;AAC9D;AACA;AACA,aAAa,CAAC;AAAEhB,EAAAA;AAAF,CAAD,KAAeA,KAAK,CAACiB,IAAN,CAAWC,KAAX,CAAiBC,KAAM;AACnD;AACA,CALO","sourcesContent":["import styled from '@emotion/styled';\nimport { default as nativeStyled } from '@emotion/native';\nimport { StyleProps } from '@tecsinapse/react-core';\nimport { Td } from '../../../atoms/Table';\nimport { Button } from '../../../atoms/Button';\n\nexport const TdFooterStyled = styled(Td)<Partial<StyleProps>>`\n padding: ${({ theme }) => theme.spacing.centi} 0 0 0;\n`;\n\nexport const FlexContainer = styled('div')`\n display: flex;\n flex-grow: 1;\n`;\n\nexport const FooterContainer = styled(FlexContainer)`\n justify-content: space-between;\n align-items: center;\n`;\n\nexport const FooterContainerStart = styled(FlexContainer)`\n justify-content: flex-start;\n`;\n\nexport const FooterContainerEnd = styled(FlexContainer)`\n justify-content: flex-end;\n`;\n\nexport const SelectContainer = styled('div')<Partial<StyleProps>>`\n margin-right: ${({ theme }) => theme.spacing.deca};\n`;\n\nexport const NavigationButton = nativeStyled(Button)<Partial<StyleProps>>` \n border-radius: ${({ theme }) => theme.borderRadius.mili};\n height: 44px;\n justify-content: center;\n padding: ${({ theme }) => theme.spacing.centi};\n width: 44px; \n`;\n\n// Se o botão estiver ativo, renderizar outlined, caso contrario o botão é text\nexport const PageButton = nativeStyled(NavigationButton)<Partial<StyleProps>>`\n padding-right: ${({ theme }) => theme.spacing.deca};\n padding-left: ${({ theme }) => theme.spacing.deca};\n border-radius: ${({ theme }) => theme.borderRadius.mili};\n justify-content: center;\n margin-left: ${({ theme }) => theme.spacing.micro};\n margin-right: ${({ theme }) => theme.spacing.micro};\n`;\n\nexport const PagesContainer = styled('div')<Partial<StyleProps>>`\n margin: 0 20px;\n display: flex;\n`;\n\nexport const HoveredText = styled('div')<Partial<StyleProps>>`\n user-select: none;\n &:hover * {\n color: ${({ theme }) => theme.font.color.light};\n }\n`;\n"],"file":"styled.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tecsinapse/react-web-kit",
3
3
  "description": "TecSinapse React components",
4
- "version": "1.12.11",
4
+ "version": "1.14.0",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "license": "MIT",
@@ -14,7 +14,7 @@
14
14
  "@emotion/native": "^11.0.0",
15
15
  "@emotion/react": "^11.4.1",
16
16
  "@emotion/styled": "^11.3.0",
17
- "@tecsinapse/react-core": "^1.12.10",
17
+ "@tecsinapse/react-core": "^1.13.0",
18
18
  "@types/react-native": "^0.64.4",
19
19
  "react-native-vector-icons": "^8.1.0",
20
20
  "react-transition-group": "^4.4.2"
@@ -33,5 +33,5 @@
33
33
  "react-dom": ">=16.8.0",
34
34
  "react-native-web": "^0.17.1"
35
35
  },
36
- "gitHead": "5a75d80ba78335d9dba890b4b75c6bc76954c380"
36
+ "gitHead": "d5d2193bf8716615751e28b7009da59520e8080c"
37
37
  }
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { StyledContainerDropdown } from './styled';
3
+ import { Transition } from 'react-transition-group';
4
+ import { defaultStyles, transition } from '../../molecules/Select/animations';
5
+ import { Dispatch, SetStateAction } from 'react';
6
+ import { useClickAwayListener } from '@tecsinapse/react-web-kit';
7
+
8
+ export interface DropdownProps {
9
+ visible: boolean;
10
+ setVisible: Dispatch<SetStateAction<boolean>>;
11
+ }
12
+
13
+ const Component: React.FC<DropdownProps & { children: JSX.Element }> = ({
14
+ visible,
15
+ setVisible,
16
+ children,
17
+ }): JSX.Element => {
18
+ const refDropDown = React.useRef(null);
19
+ useClickAwayListener(refDropDown, setVisible);
20
+
21
+ return (
22
+ <Transition in={visible} timeout={300}>
23
+ {state => (
24
+ <StyledContainerDropdown
25
+ style={{ ...defaultStyles, ...transition['bottom'][state] }}
26
+ ref={refDropDown}
27
+ >
28
+ {children}
29
+ </StyledContainerDropdown>
30
+ )}
31
+ </Transition>
32
+ );
33
+ };
34
+
35
+ export const Dropdown = Component;
@@ -0,0 +1,15 @@
1
+ import styled from '@emotion/styled';
2
+ import { hex2rgba, StyleProps } from '@tecsinapse/react-core';
3
+
4
+ export const StyledContainerDropdown = styled('div')<Partial<StyleProps>>`
5
+ width: auto;
6
+ background-color: ${({ theme }: StyleProps) =>
7
+ theme.miscellaneous.surfaceColor};
8
+ border-radius: ${({ theme }: StyleProps) => theme.borderRadius.mili};
9
+ box-shadow: 0 2px 8px
10
+ ${({ theme }: StyleProps) => hex2rgba(theme.miscellaneous.shadow, 0.05)};
11
+ position: absolute;
12
+ padding-bottom: ${({ theme }: StyleProps) => theme.spacing.mili};
13
+ margin-top: 8px;
14
+ z-index: ${({ theme }: StyleProps) => theme.zIndex.select};
15
+ `;
@@ -23,7 +23,7 @@ Range.args = {
23
23
  label: 'Select date',
24
24
  placeholder: 'Select date',
25
25
  type: 'range',
26
- closeOnPick: true,
26
+ closeOnPick: false,
27
27
  };
28
28
 
29
29
  const TemplateDay: Story<DatePickerProps<'day'>> = args => {
@@ -1,29 +1,69 @@
1
1
  import {
2
2
  Calendar,
3
- DatePicker as DatePickerCore, DatePickerProps, SelectionType
3
+ DatePicker as DatePickerCore,
4
+ DatePickerProps,
5
+ DateRange,
6
+ SelectionType,
4
7
  } from '@tecsinapse/react-core';
5
- import React, { useCallback, useState } from 'react';
6
- import { Modal } from './Modal';
8
+ import React, { useCallback, useMemo, useState } from 'react';
9
+ import { Dropdown } from '../../atoms/Dropdown';
7
10
 
8
- export type WebDatePickerProps<T extends SelectionType> = Omit<DatePickerProps<T>, 'CalendarComponent' | 'renderCalendar' | 'requestCloseCalendar' | 'requestShowCalendar'>
11
+ export type WebDatePickerProps<T extends SelectionType> = Omit<
12
+ DatePickerProps<T>,
13
+ | 'CalendarComponent'
14
+ | 'renderCalendar'
15
+ | 'requestCloseCalendar'
16
+ | 'requestShowCalendar'
17
+ >;
9
18
 
10
- export const DatePicker = <T extends SelectionType>({ ...rest }: WebDatePickerProps<T>): JSX.Element => {
19
+ export const DatePicker = <T extends SelectionType>({
20
+ value,
21
+ type,
22
+ ...rest
23
+ }: WebDatePickerProps<T>): JSX.Element => {
24
+ const [visible, setVisible] = useState(false);
25
+ const show = useCallback(() => setVisible(true), []);
26
+ const close = useCallback(() => setVisible(false), []);
27
+
28
+ const getYear = useMemo(() => {
29
+ if (value) {
30
+ if (type === 'range') {
31
+ if ((value as DateRange).lowest !== undefined)
32
+ return new Date((value as DateRange).lowest).getFullYear();
33
+ } else {
34
+ return new Date(value as Date).getFullYear();
35
+ }
36
+ }
37
+ return undefined;
38
+ }, [value]);
39
+
40
+ const getMonth = useMemo(() => {
41
+ if (value) {
42
+ if (type === 'range') {
43
+ if ((value as DateRange).lowest !== undefined)
44
+ return new Date((value as DateRange).lowest).getMonth();
45
+ } else {
46
+ return new Date(value as Date).getMonth();
47
+ }
48
+ }
49
+ return undefined;
50
+ }, [value]);
11
51
 
12
- const [ visible, setVisible ] = useState(false)
13
- const show = useCallback(() => setVisible(true), [])
14
- const close = useCallback(() => setVisible(false), [])
15
-
16
52
  return (
17
53
  <DatePickerCore
18
54
  {...rest}
19
55
  CalendarComponent={Calendar}
56
+ value={value}
57
+ type={type}
58
+ year={getYear}
59
+ month={getMonth}
20
60
  requestShowCalendar={show}
21
61
  requestCloseCalendar={close}
22
- renderCalendar={(calendar) => (
23
- <Modal animationType='fade' visible={visible} onRequestClose={close}>
62
+ renderCalendar={calendar => (
63
+ <Dropdown visible={visible} setVisible={setVisible}>
24
64
  {calendar}
25
- </Modal>
65
+ </Dropdown>
26
66
  )}
27
67
  />
28
68
  );
29
- };
69
+ };
@@ -14,14 +14,19 @@ const Template: Story<DateTimePickerProps> = ({ ...args }) => {
14
14
 
15
15
  return (
16
16
  <DateTimePicker
17
- label={'Select date and time'}
18
- placeholder={'Select date and time'}
19
- mode={'datetime'}
20
17
  value={value}
21
18
  onChange={setValue}
22
19
  locale={ptBR}
20
+ {...args}
23
21
  />
24
22
  );
25
23
  };
26
24
 
27
25
  export const Base = Template.bind({});
26
+
27
+ Base.args = {
28
+ mode: 'datetime',
29
+ format: 'dd/MM/yyyy HH:mm',
30
+ label: 'Select date and time',
31
+ placeholder: 'Select date and time'
32
+ };
@@ -1,29 +1,31 @@
1
1
  import {
2
- DateTimePicker as DateTimePickerCore,
3
- DateTimePickerProps
2
+ DateTimePicker as DateTimePickerCore,
3
+ DateTimePickerProps,
4
4
  } from '@tecsinapse/react-core';
5
5
  import React, { FC, useCallback, useState } from 'react';
6
- import { Modal } from './Modal';
6
+ import { Dropdown } from '../../atoms/Dropdown';
7
7
 
8
-
9
- export type WebDateTimePickerProps = Omit<DateTimePickerProps, 'renderSelector' | 'requestShowSelector' | 'requestCloseSelector'>
8
+ export type WebDateTimePickerProps = Omit<
9
+ DateTimePickerProps,
10
+ 'renderSelector' | 'requestShowSelector' | 'requestCloseSelector'
11
+ >;
10
12
 
11
13
  export const DateTimePicker: FC<WebDateTimePickerProps> = ({ ...rest }) => {
14
+ const [visible, setVisible] = useState<boolean>(false);
12
15
 
13
- const [ visible, setVisible ] = useState(false)
14
- const show = useCallback(() => setVisible(true), [])
15
- const close = useCallback(() => setVisible(false), [])
16
+ const show = useCallback(() => setVisible(true), []);
17
+ const close = useCallback(() => setVisible(false), []);
16
18
 
17
- return (
18
- <DateTimePickerCore
19
- {...rest}
20
- requestShowSelector={show}
21
- requestCloseSelector={close}
22
- renderSelector={(selector) => (
23
- <Modal animationType='fade' visible={visible} onRequestClose={close}>
24
- {selector}
25
- </Modal>
26
- )}
27
- />
28
- );
19
+ return (
20
+ <DateTimePickerCore
21
+ {...rest}
22
+ requestShowSelector={show}
23
+ requestCloseSelector={close}
24
+ renderSelector={selector => (
25
+ <Dropdown visible={visible} setVisible={setVisible}>
26
+ {selector}
27
+ </Dropdown>
28
+ )}
29
+ />
30
+ );
29
31
  };
@@ -28,6 +28,7 @@ const SelectItem = <Data, Type extends 'single' | 'multi'>({
28
28
  checkedAll,
29
29
  setCheckedAll,
30
30
  lenghtOptions,
31
+ keyExtractor,
31
32
  }: SelectItemProps<Data, Type> & {
32
33
  setDropDownVisible: (t: boolean) => void;
33
34
  checkedAll: boolean;
@@ -36,13 +37,36 @@ const SelectItem = <Data, Type extends 'single' | 'multi'>({
36
37
  }): JSX.Element => {
37
38
  const isMulti = type === 'multi';
38
39
  const [checked, setChecked] = React.useState<boolean>(
39
- value !== undefined && type === 'multi' && (value as Data[]).includes(item)
40
+ value !== undefined &&
41
+ type === 'multi' &&
42
+ (value as Data[]).find(
43
+ data => keyExtractor(data) === keyExtractor(item)
44
+ ) !== undefined
40
45
  );
46
+
47
+ React.useEffect(() => {
48
+ if (
49
+ !checked &&
50
+ value !== undefined &&
51
+ ((type === 'multi' &&
52
+ (value as Data[]).find(
53
+ data => keyExtractor(data) === keyExtractor(item)
54
+ )) ||
55
+ (type === 'single' &&
56
+ keyExtractor(value as Data) === keyExtractor(item)))
57
+ )
58
+ setChecked(true);
59
+ }, [value, keyExtractor, type]);
60
+
41
61
  React.useEffect(() => {
42
62
  if (type === 'multi') {
43
63
  checkedAll
44
64
  ? setChecked(true)
45
- : setChecked((value as Data[]).includes(item));
65
+ : setChecked(
66
+ (value as Data[]).find(
67
+ data => keyExtractor(data) === keyExtractor(item)
68
+ ) !== undefined
69
+ );
46
70
  }
47
71
  }, [checkedAll]);
48
72
 
@@ -59,7 +83,9 @@ const SelectItem = <Data, Type extends 'single' | 'multi'>({
59
83
  [..._value, key].length === lenghtOptions && setCheckedAll(true);
60
84
  } else {
61
85
  const auxArray: Data[] = [..._value];
62
- const indexToExclude = auxArray.indexOf(key);
86
+ const indexToExclude = auxArray.findIndex(
87
+ data => keyExtractor(data) === keyExtractor(key)
88
+ );
63
89
  auxArray.splice(indexToExclude, 1);
64
90
  onSelect([...auxArray] as OnSelectArg);
65
91
  setCheckedAll(false);
@@ -30,10 +30,12 @@ export const SelectContainer = styled('div')<Partial<StyleProps>>`
30
30
  margin-right: ${({ theme }) => theme.spacing.deca};
31
31
  `;
32
32
 
33
- export const NavigationButton = nativeStyled(Button)<Partial<StyleProps>>`
34
- padding: ${({ theme }) => theme.spacing.centi};
33
+ export const NavigationButton = nativeStyled(Button)<Partial<StyleProps>>`
35
34
  border-radius: ${({ theme }) => theme.borderRadius.mili};
35
+ height: 44px;
36
36
  justify-content: center;
37
+ padding: ${({ theme }) => theme.spacing.centi};
38
+ width: 44px;
37
39
  `;
38
40
 
39
41
  // Se o botão estiver ativo, renderizar outlined, caso contrario o botão é text