expensify-common 1.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +15 -6
  2. package/dist/API.d.ts +11 -0
  3. package/{lib/API.jsx → dist/API.js} +230 -165
  4. package/dist/APIDeferred.d.ts +7 -0
  5. package/{lib/APIDeferred.jsx → dist/APIDeferred.js} +35 -53
  6. package/dist/BrowserDetect.d.ts +19 -0
  7. package/dist/BrowserDetect.js +107 -0
  8. package/dist/CONST.d.ts +813 -0
  9. package/{lib/CONST.jsx → dist/CONST.js} +245 -167
  10. package/dist/Cookie.d.ts +68 -0
  11. package/{lib/Cookie.jsx → dist/Cookie.js} +23 -36
  12. package/dist/CredentialsWrapper.d.ts +32 -0
  13. package/dist/CredentialsWrapper.js +52 -0
  14. package/dist/Device.d.ts +8 -0
  15. package/dist/Device.js +15 -0
  16. package/dist/ExpenseRule.d.ts +39 -0
  17. package/{lib/ExpenseRule.jsx → dist/ExpenseRule.js} +12 -14
  18. package/dist/ExpensiMark.d.ts +142 -0
  19. package/dist/ExpensiMark.js +1026 -0
  20. package/dist/Func.d.ts +40 -0
  21. package/{lib/Func.jsx → dist/Func.js} +19 -25
  22. package/dist/Log.d.ts +3 -0
  23. package/dist/Log.js +41 -0
  24. package/dist/Logger.d.ts +77 -0
  25. package/dist/Logger.js +126 -0
  26. package/dist/Network.d.ts +6 -0
  27. package/{lib/Network.jsx → dist/Network.js} +48 -45
  28. package/dist/Num.d.ts +95 -0
  29. package/{lib/Num.jsx → dist/Num.js} +20 -40
  30. package/dist/PageEvent.d.ts +25 -0
  31. package/dist/PageEvent.js +28 -0
  32. package/dist/PubSub.d.ts +2 -0
  33. package/{lib/PubSub.jsx → dist/PubSub.js} +27 -39
  34. package/dist/ReportHistoryStore.d.ts +64 -0
  35. package/dist/ReportHistoryStore.js +261 -0
  36. package/dist/Templates.d.ts +2 -0
  37. package/{lib/Templates.jsx → dist/Templates.js} +33 -48
  38. package/dist/Url.d.ts +22 -0
  39. package/dist/Url.js +30 -0
  40. package/dist/components/CopyText.d.ts +45 -0
  41. package/{lib/components/CopyText.jsx → dist/components/CopyText.js} +16 -23
  42. package/dist/components/StepProgressBar.d.ts +22 -0
  43. package/dist/components/StepProgressBar.js +68 -0
  44. package/dist/components/form/element/combobox.d.ts +237 -0
  45. package/{lib → dist}/components/form/element/combobox.js +361 -516
  46. package/dist/components/form/element/dropdown.d.ts +35 -0
  47. package/dist/components/form/element/dropdown.js +66 -0
  48. package/dist/components/form/element/dropdownItem.d.ts +55 -0
  49. package/dist/components/form/element/dropdownItem.js +118 -0
  50. package/dist/components/form/element/onOffSwitch.d.ts +94 -0
  51. package/dist/components/form/element/onOffSwitch.js +195 -0
  52. package/dist/components/form/element/switch.d.ts +58 -0
  53. package/{lib → dist}/components/form/element/switch.js +29 -66
  54. package/dist/fastMerge.d.ts +9 -0
  55. package/dist/fastMerge.js +77 -0
  56. package/dist/index.d.ts +19 -0
  57. package/dist/index.js +71 -0
  58. package/dist/jquery.expensifyIframify.d.ts +10 -0
  59. package/{lib → dist}/jquery.expensifyIframify.js +52 -93
  60. package/dist/mixins/PubSub.d.ts +20 -0
  61. package/{lib/mixins/PubSub.jsx → dist/mixins/PubSub.js} +12 -11
  62. package/dist/mixins/extraClasses.d.ts +8 -0
  63. package/{lib → dist}/mixins/extraClasses.js +8 -12
  64. package/dist/mixins/validationClasses.d.ts +12 -0
  65. package/dist/mixins/validationClasses.js +58 -0
  66. package/dist/str.d.ts +613 -0
  67. package/{lib → dist}/str.js +176 -160
  68. package/dist/tlds.d.ts +2 -0
  69. package/dist/tlds.js +4 -0
  70. package/dist/utils.d.ts +5 -0
  71. package/dist/utils.js +13 -0
  72. package/package.json +47 -18
  73. package/.editorconfig +0 -34
  74. package/.eslintrc.js +0 -11
  75. package/.github/CODEOWNERS +0 -2
  76. package/.github/CONTRIBUTING.md +0 -163
  77. package/.github/ISSUE_TEMPLATE.md +0 -3
  78. package/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  79. package/.github/workflows/cla.yml +0 -39
  80. package/.github/workflows/lint.yml +0 -29
  81. package/.github/workflows/test.yml +0 -29
  82. package/CLA.md +0 -20
  83. package/Gruntfile.js +0 -13
  84. package/__tests__/ExpensiMark-test.js +0 -340
  85. package/__tests__/Logger-test.js +0 -55
  86. package/__tests__/Str-test.js +0 -53
  87. package/babel.config.js +0 -12
  88. package/grunt/configloader.js +0 -17
  89. package/grunt/configs/chokidar.js +0 -23
  90. package/grunt/configs/eslint.js +0 -15
  91. package/grunt/task/watch.js +0 -3
  92. package/grunt/taskloader.js +0 -25
  93. package/lib/BrowserDetect.jsx +0 -91
  94. package/lib/ExpensiMark.js +0 -253
  95. package/lib/Log.jsx +0 -36
  96. package/lib/Logger.jsx +0 -154
  97. package/lib/PageEvent.jsx +0 -23
  98. package/lib/ReportHistoryStore.jsx +0 -194
  99. package/lib/components/StepProgressBar.js +0 -49
  100. package/lib/components/form/element/dropdown.js +0 -90
  101. package/lib/components/form/element/dropdownItem.js +0 -178
  102. package/lib/components/form/element/onOffSwitch.jsx +0 -229
  103. package/lib/mixins/validationClasses.js +0 -23
  104. package/lib/tlds.jsx +0 -3
@@ -1,23 +1,23 @@
1
- import React from 'react';
2
- import Clipboard from 'clipboard'
3
- import PropTypes from 'prop-types';
4
-
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const react_1 = __importDefault(require("react"));
7
+ const clipboard_1 = __importDefault(require("clipboard"));
8
+ const prop_types_1 = __importDefault(require("prop-types"));
5
9
  const propTypes = {
6
10
  // Callback fired when text has been copied - useful to display UI confirmation
7
- onSuccess: PropTypes.func,
8
-
11
+ onSuccess: prop_types_1.default.func,
9
12
  // The text to be copied
10
- textContent: PropTypes.string,
11
-
13
+ textContent: prop_types_1.default.string,
12
14
  // Function as a child exposes the copyTextToClipboard fuction
13
- children: PropTypes.func.isRequired
15
+ children: prop_types_1.default.func.isRequired,
14
16
  };
15
-
16
17
  const defaultProps = {
17
- onSuccess: () => {},
18
+ onSuccess: () => { },
18
19
  textContent: '',
19
20
  };
20
-
21
21
  /**
22
22
  * Simple render prop component that encapsulates the Clipboard feature and exposes a function that can be tied to any event
23
23
  *
@@ -31,38 +31,31 @@ const defaultProps = {
31
31
  * )}
32
32
  * </React.c.CopyText>
33
33
  */
34
- class CopyText extends React.Component {
34
+ class CopyText extends react_1.default.Component {
35
35
  componentDidMount() {
36
36
  this.hiddenLink = document.createElement('a');
37
-
38
37
  // Sets up the clipboard instance
39
- this.clipboard = new Clipboard(this.hiddenLink, {
40
- text: () => this.props.textContent
38
+ this.clipboard = new clipboard_1.default(this.hiddenLink, {
39
+ text: () => this.props.textContent,
41
40
  });
42
-
43
41
  // Fires callback when the clipboard has succesfully copied
44
42
  this.clipboard.on('success', () => {
45
43
  this.props.onSuccess();
46
44
  });
47
45
  }
48
-
49
46
  componentWillUnmount() {
50
47
  this.clipboard.destroy();
51
48
  }
52
-
53
49
  /**
54
50
  * Fires click event on invisible link
55
51
  */
56
52
  copyTextToClipboard() {
57
53
  this.hiddenLink.click();
58
54
  }
59
-
60
55
  render() {
61
56
  return this.props.children(() => this.copyTextToClipboard());
62
57
  }
63
58
  }
64
-
65
59
  CopyText.propTypes = propTypes;
66
60
  CopyText.defaultProps = defaultProps;
67
-
68
- export default CopyText;
61
+ exports.default = CopyText;
@@ -0,0 +1,22 @@
1
+ export default StepProgressBar;
2
+ /**
3
+ * Step progress bar.
4
+ *
5
+ * @param {array} steps of {id, title}
6
+ * @param {string} currentStep id
7
+ *
8
+ * @return {React.Component}
9
+ */
10
+ declare function StepProgressBar({ steps, currentStep }: array): React.Component;
11
+ declare namespace StepProgressBar {
12
+ export { propTypes };
13
+ }
14
+ import React from 'react';
15
+ declare namespace propTypes {
16
+ let steps: PropTypes.Validator<(PropTypes.InferProps<{
17
+ id: PropTypes.Validator<string>;
18
+ title: PropTypes.Validator<string>;
19
+ }> | null | undefined)[]>;
20
+ let currentStep: PropTypes.Validator<string>;
21
+ }
22
+ import PropTypes from 'prop-types';
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const react_1 = __importDefault(require("react"));
30
+ const underscore_1 = __importDefault(require("underscore"));
31
+ const prop_types_1 = __importDefault(require("prop-types"));
32
+ const classnames_1 = __importDefault(require("classnames"));
33
+ const UIConstants = __importStar(require("../CONST"));
34
+ const stepShape = {
35
+ id: prop_types_1.default.string.isRequired,
36
+ title: prop_types_1.default.string.isRequired,
37
+ };
38
+ const propTypes = {
39
+ steps: prop_types_1.default.arrayOf(prop_types_1.default.shape(stepShape)).isRequired,
40
+ currentStep: prop_types_1.default.string.isRequired,
41
+ };
42
+ /**
43
+ * Step progress bar.
44
+ *
45
+ * @param {array} steps of {id, title}
46
+ * @param {string} currentStep id
47
+ *
48
+ * @return {React.Component}
49
+ */
50
+ function StepProgressBar({ steps, currentStep }) {
51
+ const isCurrentStep = (step) => step.id === currentStep;
52
+ const currentStepIndex = Math.max(0, underscore_1.default.findIndex(steps, isCurrentStep));
53
+ const renderStep = (step, i) => {
54
+ let status = currentStepIndex === i ? UIConstants.UI.ACTIVE : '';
55
+ if (currentStepIndex > i) {
56
+ status = 'complete';
57
+ }
58
+ return (react_1.default.createElement("div", { key: step.id, className: (0, classnames_1.default)('progress-step', 'js_step', step.id, status) },
59
+ react_1.default.createElement("div", { className: "progress-dot" },
60
+ react_1.default.createElement("div", { className: "inner" })),
61
+ react_1.default.createElement("div", { className: "progress-desc" },
62
+ react_1.default.createElement("span", { className: "js_step_title" }, step.title))));
63
+ };
64
+ return (react_1.default.createElement("div", { id: "js_steps_progress", className: "progress-wrapper" },
65
+ react_1.default.createElement("div", { className: "progress" }, underscore_1.default.map(steps, renderStep))));
66
+ }
67
+ StepProgressBar.propTypes = propTypes;
68
+ exports.default = StepProgressBar;
@@ -0,0 +1,237 @@
1
+ export default Combobox;
2
+ /**
3
+ * A combobox useful for searching for values in a large list
4
+ */
5
+ declare class Combobox extends React.Component<any, any, any> {
6
+ constructor(props: any);
7
+ /**
8
+ * @param {Boolean} noDefaultValue Overrides the default value to have '' as the currentValue
9
+ * @param {Object[]} [newOptions] when resetting this component, we can specify new options to use
10
+ * @param {Object[]} [newAlreadySelectedOptions] when resetting this component, we can specify new already selected options to use
11
+ *
12
+ * @returns {Object}
13
+ */
14
+ getStartState(noDefaultValue: boolean, newOptions?: Object[] | undefined, newAlreadySelectedOptions?: Object[] | undefined): Object;
15
+ /**
16
+ * Returns a set of our full options according to the maxItemsToShow
17
+ *
18
+ * @param {String|Number} currentValue
19
+ * @param {Object[]} [newAlreadySelectedOptions]
20
+ * @returns {Array}
21
+ */
22
+ getTruncatedOptions(currentValue: string | number, newAlreadySelectedOptions?: Object[] | undefined): any[];
23
+ /**
24
+ * Returns the selected value(s)
25
+ *
26
+ * @return {String}
27
+ */
28
+ getValue(): string;
29
+ /**
30
+ * Sets the current value
31
+ *
32
+ * @param {String} val
33
+ */
34
+ setValue(val: string): void;
35
+ /**
36
+ * Hard sets the current text to what we want
37
+ *
38
+ * @param {String} val
39
+ */
40
+ setText(val: string): void;
41
+ /**
42
+ * Sets the disabled state of this component
43
+ *
44
+ * @param {Boolean} isDisabled
45
+ */
46
+ setDisabled(isDisabled: boolean): void;
47
+ /**
48
+ * Set an error for a specific tag
49
+ */
50
+ setError(): void;
51
+ /**
52
+ * Deselects any current option if it exists
53
+ */
54
+ deselectCurrentOption(): void;
55
+ /**
56
+ * Swaps the focused index from {oldFocusedIndex} to {newFocusedIndex}
57
+ *
58
+ * @param {number} oldFocusedIndex
59
+ * @param {number} newFocusedIndex
60
+ */
61
+ switchFocusedIndex(oldFocusedIndex: number, newFocusedIndex: number): void;
62
+ /**
63
+ * Returns the selector to it's original state
64
+ *
65
+ * @param {Boolean} noDefaultValue Overrides the initials state defaultValue by setting the currentValue to ''
66
+ * @param {Object[]} [newOptions] we can recreate it with new options
67
+ * @param {Object[]} [newAlreadySelectedOptions] we can recreate it with new already selected options
68
+ */
69
+ reset(noDefaultValue: boolean, newOptions?: Object[] | undefined, newAlreadySelectedOptions?: Object[] | undefined): void;
70
+ /**
71
+ * When the dropdown is closed, we reset the focused property of all of our options
72
+ */
73
+ resetFocusedElements(): void;
74
+ /**
75
+ * Fired when we "click away" with the dropdown open
76
+ *
77
+ * @param {SyntheticEvent} e
78
+ */
79
+ handleClickAway(e: SyntheticEvent): void;
80
+ /**
81
+ * Sets a clicklistener to close the dropdown if it is currently open
82
+ */
83
+ resetClickAwayHandler(): void;
84
+ /**
85
+ * Clear an error for a specific tag
86
+ */
87
+ clearError(): void;
88
+ /**
89
+ * Opens or closes the dropdown
90
+ */
91
+ toggleDropdown(): void;
92
+ /**
93
+ * Just open the dropdown (when the input gets focus)
94
+ */
95
+ openDropdown(): void;
96
+ /**
97
+ * Closes the dropdown and removes the click handler that calls this function after the dropdown is closed
98
+ *
99
+ * @param {SyntheticEvent} [e]
100
+ */
101
+ closeDropdown(e?: any): void;
102
+ /**
103
+ * If the user presses tab when the dropdown button is focused, then we close the dropdown
104
+ * because they are trying to get to the next form components
105
+ *
106
+ * @param {SyntheticEvent} e
107
+ */
108
+ closeDropdownOnTabOut(e: SyntheticEvent): void;
109
+ /**
110
+ * Stops events from doing anything outside of the current function (in theory).
111
+ * This doesn't work between jquery and React events because React's event propagation is a separate system.
112
+ *
113
+ * @param {SyntheticEvent} e
114
+ */
115
+ stopEvent(e: SyntheticEvent): void;
116
+ /**
117
+ * This is triggered whenever there is a key up event in the text input
118
+ *
119
+ * @param {SyntheticEvent} e
120
+ */
121
+ handleKeyDown(e: SyntheticEvent): void;
122
+ /**
123
+ * This is triggered whenever there is a change event in the text input
124
+ * (from any valid input that's not being handled from the keyUp event)
125
+ *
126
+ * @param {SyntheticEvent} e
127
+ */
128
+ performSearch(e: SyntheticEvent): void;
129
+ /**
130
+ * Handle state changes for when a user clicks on an item in the dropdown
131
+ *
132
+ * @param {String|Number} selectedValue
133
+ */
134
+ handleClick(selectedValue: string | number): void;
135
+ state: Object;
136
+ scrollPosition: number;
137
+ componentDidMount(): void;
138
+ UNSAFE_componentWillReceiveProps(nextProps: any): void;
139
+ componentDidUpdate(): void;
140
+ componentWillUnmount(): void;
141
+ initialValue: any;
142
+ options: any;
143
+ initialText: any;
144
+ render(): React.JSX.Element | null;
145
+ value: HTMLInputElement | null | undefined;
146
+ dropDown: DropDown | null | undefined;
147
+ }
148
+ declare namespace Combobox {
149
+ export { propTypes };
150
+ export { defaultProps };
151
+ }
152
+ import React from 'react';
153
+ import DropDown from './dropdown';
154
+ declare namespace propTypes {
155
+ let options: PropTypes.Validator<(PropTypes.InferProps<{
156
+ value: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
157
+ text: PropTypes.Requireable<string>;
158
+ children: PropTypes.Requireable<PropTypes.ReactElementLike>;
159
+ hasError: PropTypes.Requireable<boolean>;
160
+ disabled: PropTypes.Requireable<boolean>;
161
+ id: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
162
+ divider: PropTypes.Requireable<boolean>;
163
+ selected: PropTypes.Requireable<boolean>;
164
+ }> | null | undefined)[]>;
165
+ let defaultValue: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
166
+ let value: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
167
+ let alreadySelectedOptions: PropTypes.Requireable<(PropTypes.InferProps<{
168
+ value: PropTypes.Requireable<NonNullable<string | number | null | undefined>>;
169
+ text: PropTypes.Requireable<string>;
170
+ }> | null | undefined)[]>;
171
+ let onChange: PropTypes.Requireable<(...args: any[]) => any>;
172
+ let onClear: PropTypes.Requireable<(...args: any[]) => any>;
173
+ let onDropdownStateChange: PropTypes.Requireable<(...args: any[]) => any>;
174
+ let maxItemsToShow: PropTypes.Requireable<number>;
175
+ let maxSearchResults: PropTypes.Requireable<number>;
176
+ let propertyToDisplay: PropTypes.Requireable<string>;
177
+ let openOnInit: PropTypes.Requireable<boolean>;
178
+ let allowAnyValue: PropTypes.Requireable<boolean>;
179
+ let noResultsText: PropTypes.Requireable<string>;
180
+ let isReadOnly: PropTypes.Requireable<boolean>;
181
+ let placeholder: PropTypes.Requireable<string>;
182
+ let extraClasses: PropTypes.Requireable<NonNullable<string | object | null | undefined>>;
183
+ let hideUntilManuallyOpened: PropTypes.Requireable<boolean>;
184
+ let alwaysShowSelectedOnTop: PropTypes.Requireable<boolean>;
185
+ let hasInitialError: PropTypes.Requireable<boolean>;
186
+ let bs4: PropTypes.Requireable<boolean>;
187
+ let showDisabledOptionsInResults: PropTypes.Requireable<boolean>;
188
+ let autoScrollToTop: PropTypes.Requireable<boolean>;
189
+ let dropDownClasses: PropTypes.Requireable<NonNullable<string | object | null | undefined>>;
190
+ }
191
+ declare namespace defaultProps {
192
+ let defaultValue_1: string;
193
+ export { defaultValue_1 as defaultValue };
194
+ let value_1: string;
195
+ export { value_1 as value };
196
+ export function onChange_1(): void;
197
+ export { onChange_1 as onChange };
198
+ export function onClear_1(): void;
199
+ export { onClear_1 as onClear };
200
+ export function onDropdownStateChange_1(): void;
201
+ export { onDropdownStateChange_1 as onDropdownStateChange };
202
+ let maxItemsToShow_1: number;
203
+ export { maxItemsToShow_1 as maxItemsToShow };
204
+ let maxSearchResults_1: number;
205
+ export { maxSearchResults_1 as maxSearchResults };
206
+ let propertyToDisplay_1: string;
207
+ export { propertyToDisplay_1 as propertyToDisplay };
208
+ let allowAnyValue_1: boolean;
209
+ export { allowAnyValue_1 as allowAnyValue };
210
+ let openOnInit_1: boolean;
211
+ export { openOnInit_1 as openOnInit };
212
+ let isReadOnly_1: boolean;
213
+ export { isReadOnly_1 as isReadOnly };
214
+ let alreadySelectedOptions_1: never[];
215
+ export { alreadySelectedOptions_1 as alreadySelectedOptions };
216
+ let noResultsText_1: string;
217
+ export { noResultsText_1 as noResultsText };
218
+ let placeholder_1: string;
219
+ export { placeholder_1 as placeholder };
220
+ let extraClasses_1: never[];
221
+ export { extraClasses_1 as extraClasses };
222
+ let hideUntilManuallyOpened_1: boolean;
223
+ export { hideUntilManuallyOpened_1 as hideUntilManuallyOpened };
224
+ let alwaysShowSelectedOnTop_1: boolean;
225
+ export { alwaysShowSelectedOnTop_1 as alwaysShowSelectedOnTop };
226
+ let hasInitialError_1: boolean;
227
+ export { hasInitialError_1 as hasInitialError };
228
+ let bs4_1: boolean;
229
+ export { bs4_1 as bs4 };
230
+ let showDisabledOptionsInResults_1: boolean;
231
+ export { showDisabledOptionsInResults_1 as showDisabledOptionsInResults };
232
+ let autoScrollToTop_1: boolean;
233
+ export { autoScrollToTop_1 as autoScrollToTop };
234
+ let dropDownClasses_1: never[];
235
+ export { dropDownClasses_1 as dropDownClasses };
236
+ }
237
+ import PropTypes from 'prop-types';