@bigbinary/neetoui-rn 0.0.268 → 0.0.270

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 (66) hide show
  1. package/package.json +2 -3
  2. package/src/components/Accordion.jsx +0 -266
  3. package/src/components/ActionIcon.jsx +0 -76
  4. package/src/components/Alert.jsx +0 -262
  5. package/src/components/AnimatedImage.jsx +0 -140
  6. package/src/components/Avatar.jsx +0 -144
  7. package/src/components/Badge.jsx +0 -97
  8. package/src/components/BottomSheet.jsx +0 -487
  9. package/src/components/BottomTabBar.jsx +0 -232
  10. package/src/components/Button.jsx +0 -275
  11. package/src/components/ButtonGroup.jsx +0 -120
  12. package/src/components/Calendar.jsx +0 -128
  13. package/src/components/Card.jsx +0 -90
  14. package/src/components/Carousel.jsx +0 -116
  15. package/src/components/ChatInput/AttachmentsView.jsx +0 -51
  16. package/src/components/ChatInput/Badge.jsx +0 -24
  17. package/src/components/ChatInput/ChatInput.jsx +0 -564
  18. package/src/components/ChatInput/EmailFields.jsx +0 -122
  19. package/src/components/ChatInput/IconButton.jsx +0 -34
  20. package/src/components/ChatInput/MentionsInputWrapper.jsx +0 -155
  21. package/src/components/CheckBox.jsx +0 -150
  22. package/src/components/Chip.jsx +0 -180
  23. package/src/components/Container.jsx +0 -31
  24. package/src/components/Divider.jsx +0 -79
  25. package/src/components/FAB.jsx +0 -113
  26. package/src/components/FlashList.jsx +0 -189
  27. package/src/components/FlatList.js +0 -10
  28. package/src/components/Input.jsx +0 -357
  29. package/src/components/InputEmailChip.jsx +0 -246
  30. package/src/components/LineLoader.jsx +0 -46
  31. package/src/components/ListItem.jsx +0 -68
  32. package/src/components/Loader.jsx +0 -122
  33. package/src/components/MultiSelect.jsx +0 -631
  34. package/src/components/NotificationIcon.jsx +0 -38
  35. package/src/components/NotificationPreferenceList.jsx +0 -208
  36. package/src/components/OnBoarding.jsx +0 -134
  37. package/src/components/OrganizationItem.jsx +0 -110
  38. package/src/components/OtpInputs.jsx +0 -194
  39. package/src/components/ParentView.jsx +0 -139
  40. package/src/components/Popover.jsx +0 -221
  41. package/src/components/RadioButton.jsx +0 -155
  42. package/src/components/RichTextEditor.jsx +0 -163
  43. package/src/components/Ripple.jsx +0 -281
  44. package/src/components/ScrollView.js +0 -14
  45. package/src/components/SearchBar.jsx +0 -207
  46. package/src/components/SegmentedTopBar/Indicator.jsx +0 -77
  47. package/src/components/SegmentedTopBar/Tab.jsx +0 -37
  48. package/src/components/SegmentedTopBar/index.jsx +0 -128
  49. package/src/components/SocialButton.jsx +0 -106
  50. package/src/components/Toast.jsx +0 -195
  51. package/src/components/ToggleSwitch.jsx +0 -112
  52. package/src/components/TopBar.jsx +0 -147
  53. package/src/components/Touchable.jsx +0 -133
  54. package/src/components/TouchableWithoutFeedback.jsx +0 -51
  55. package/src/components/Typography.jsx +0 -93
  56. package/src/components/index.js +0 -45
  57. package/src/config/index.js +0 -1
  58. package/src/config/toasterConfig.jsx +0 -142
  59. package/src/contexts/index.js +0 -3
  60. package/src/hooks/index.js +0 -3
  61. package/src/hooks/useDebounce.js +0 -17
  62. package/src/hooks/useKeyboard.js +0 -33
  63. package/src/hooks/useRefreshByUser.js +0 -20
  64. package/src/index.js +0 -2
  65. package/src/theme/index.js +0 -181
  66. package/src/utils/utils.js +0 -56
@@ -1,564 +0,0 @@
1
- import React, {
2
- useEffect,
3
- useRef,
4
- useCallback,
5
- useState,
6
- forwardRef,
7
- useImperativeHandle,
8
- } from "react";
9
-
10
- import {
11
- ChatBubble,
12
- Notes,
13
- Attachment,
14
- Forward,
15
- CannedResponses,
16
- Down,
17
- } from "@bigbinary/neeto-icons-rn";
18
- import { parse } from "node-html-parser";
19
- import PropTypes from "prop-types";
20
- import { moderateScale } from "react-native-size-matters";
21
-
22
- import ExpandSVG from "@assets/icons/expand.svg";
23
- import MinimizeSVG from "@assets/icons/minimize.svg";
24
- import { Container, LineLoader, Popover, Button } from "@components";
25
-
26
- import { AttachmentsView } from "./AttachmentsView";
27
- import { EmailFields } from "./EmailFields";
28
- import { IconButton } from "./IconButton";
29
- import { MentionsInputWrapper } from "./MentionsInputWrapper";
30
-
31
- import { theme } from "../../theme";
32
-
33
- // eslint-disable-next-line @bigbinary/neeto/no-dangling-constants
34
- const OPTION_TYPES = {
35
- REPLY: "REPLY",
36
- NOTE: "NOTE",
37
- FORWARD: "FORWARD",
38
- };
39
-
40
- const placeholders = {
41
- [OPTION_TYPES.REPLY]: "Type here to reply…",
42
- [OPTION_TYPES.NOTE]: "Add note here…",
43
- [OPTION_TYPES.FORWARD]: "Type here to forward…",
44
- };
45
-
46
- const labels = {
47
- [OPTION_TYPES.REPLY]: "Reply",
48
- [OPTION_TYPES.NOTE]: "Add note",
49
- [OPTION_TYPES.FORWARD]: "Forward",
50
- };
51
-
52
- /**
53
- * ChatInput component supports various options like `REPLY`, `NOTE` and `FORWARD`.
54
- * This component supports below props categories from [styled-system ](/styled-system).
55
- * <ul>
56
- * <li>flexbox</li>
57
- * <li>space</li>
58
- * <li>border</li>
59
- * <li>buttonStyle</li>
60
- * <li>brandLeft</li>
61
- * <li>typography</li>
62
- * </ul>
63
- *
64
- * <div class="screenshots">
65
- * <img src="screenshots/chatInput/chatInput.png" />
66
- * </div>
67
- *
68
- * ## Usage
69
- * ```js
70
- * import * as React from 'react';
71
- * import { Typography, ChatInput, Container } from '@bigbinary/neetoui-rn';
72
- *
73
- * export default function Main() {
74
- * const [value, setValue] = React.useState(
75
- * "Hey Oliver, We are working on this issue. We will keep you update");
76
- *
77
- * return (
78
- * <Container flex={1}>
79
- * <Container alignItems="center" flex={1} justifyContent="center">
80
- * <Typography> Desk Example</Typography>
81
- * </Container>
82
- * <Container align-self="end">
83
- * <ChatInput
84
- * shouldShowEmailFields
85
- * attachmentsCount={2}
86
- * toEmails="oliver@example.com"
87
- * value={value}
88
- * Attachments={
89
- * <Container alignItems="flex-start">
90
- * <AnimatedImage
91
- * imageHeight={30}
92
- * imageUrl="https://picsum.photos/255/139"
93
- * imageWidth={30}
94
- * resizeMode="cover"
95
- * />
96
- * </Container>
97
- * }
98
- * onChangeText={setValue}
99
- * onCannedResponse={() => {
100
- * alert("On Canned Response");
101
- * }}
102
- * onForward={() => {
103
- * alert("On Forward");
104
- * }}
105
- * />
106
- * </Container>
107
- * </Container>
108
- * );
109
- * }
110
- * ```
111
- */
112
-
113
- const convertMentionsToHTMLAndPlainText = ({ suggestions, value }) => {
114
- const mentionsRegex = new RegExp(/@\[[^)]*\)/g);
115
- let html = `<p>${value}</p>`;
116
- let plainText = value;
117
- const allMentions = html.matchAll(mentionsRegex);
118
-
119
- for (const mentionObject of allMentions) {
120
- const mention = mentionObject[0];
121
- const id = /\((.*)\)/.exec(mention)[1];
122
-
123
- const suggestion = suggestions.find(suggestion => suggestion.id === id);
124
-
125
- const rootNode = parse("<span></span>");
126
- const spanNode = rootNode.querySelector("span");
127
-
128
- spanNode.setAttribute("data-type", "mention");
129
- spanNode.setAttribute("data-id", id);
130
- spanNode.setAttribute("data-label", suggestion.name);
131
- spanNode.set_content(`@${suggestion.name}`);
132
- const rootNodeString = rootNode.toString();
133
- html = html.replace(mention, rootNodeString);
134
-
135
- const plainTextMention = `@${suggestion.name}`;
136
- plainText = plainText.replace(mention, plainTextMention);
137
- }
138
-
139
- return { html, plainText };
140
- };
141
-
142
- export const ChatInput = forwardRef(
143
- (
144
- {
145
- shouldShowEmailFields,
146
- showReplyMenuOptions,
147
- value = "",
148
- onChangeText = () => {},
149
- onForward,
150
- onCannedResponse,
151
- toEmails: initialToEmails,
152
- onReply = () => {},
153
- onAddNote = () => {},
154
- onAttachment = () => {},
155
- attachmentsCount,
156
- Attachments,
157
- showCannedResponsesFor = [OPTION_TYPES.REPLY],
158
- showSuggestionsFor = [OPTION_TYPES.NOTE],
159
- disabled,
160
- isLoading = true,
161
- onOptionChange = () => {},
162
- initialSelectedOption = OPTION_TYPES.REPLY,
163
- suggestions,
164
- ...rest
165
- },
166
- ref
167
- ) => {
168
- const inputRef = useRef();
169
-
170
- const [selectedOption, setSelectedOption] = useState(initialSelectedOption);
171
- const [isEmailFieldsVisible, setIsEmailFieldsVisible] = useState(false);
172
- const [isAttachmentsVisible, setIsAttachmentsVisible] = useState(false);
173
-
174
- const isReplyOptionSelected = selectedOption === OPTION_TYPES.REPLY;
175
- const isNoteOptionSelected = selectedOption === OPTION_TYPES.NOTE;
176
- const isForwardOptionSelected = selectedOption === OPTION_TYPES.FORWARD;
177
-
178
- const [toEmails, setToEmails] = useState(initialToEmails ?? []);
179
- const [toEmailsForForward, setToEmailsForForward] = useState([]);
180
- const [ccEmails, setCcEmails] = useState([]);
181
- const [bccEmails, setBccEmails] = useState([]);
182
-
183
- const moreReplyOptions = [
184
- {
185
- label: "Send and set as closed",
186
- Icon: () => null,
187
- onPress: () => {
188
- onReply({
189
- toEmails,
190
- ccEmails,
191
- bccEmails,
192
- status: "closed",
193
- ...convertMentionsToHTMLAndPlainText({ suggestions, value }),
194
- });
195
- },
196
- },
197
- ];
198
-
199
- useImperativeHandle(
200
- ref,
201
- () => ({
202
- clearEmailFields: () => {
203
- setToEmails(initialToEmails ?? []);
204
- setToEmailsForForward([]);
205
- setCcEmails([]);
206
- setBccEmails([]);
207
- inputRef.current.blur();
208
- },
209
- }),
210
- [initialToEmails, isReplyOptionSelected]
211
- );
212
-
213
- useEffect(() => {
214
- onOptionChange(selectedOption);
215
- }, [selectedOption]);
216
-
217
- useEffect(() => {
218
- setSelectedOption(initialSelectedOption);
219
- }, [initialSelectedOption]);
220
-
221
- useEffect(() => {
222
- setToEmails(initialToEmails ?? []);
223
- }, [initialToEmails]);
224
-
225
- const showEmailFieldsAndAttachments = () => {
226
- setIsAttachmentsVisible(true);
227
- setIsEmailFieldsVisible(true);
228
- };
229
-
230
- const hideEmailFieldsAndAttachments = () => {
231
- setIsAttachmentsVisible(false);
232
- setIsEmailFieldsVisible(false);
233
- };
234
-
235
- const onReplyClickHandler = () => {
236
- hideEmailFieldsAndAttachments();
237
- inputRef.current.focus();
238
- setSelectedOption(OPTION_TYPES.REPLY);
239
- };
240
-
241
- const onAddNoteClickHandler = () => {
242
- hideEmailFieldsAndAttachments();
243
- inputRef.current.focus();
244
- setIsEmailFieldsVisible(false);
245
- setSelectedOption(OPTION_TYPES.NOTE);
246
- };
247
-
248
- const onAddForwardClickHandler = () => {
249
- inputRef.current.focus();
250
- setIsEmailFieldsVisible(true);
251
- setIsAttachmentsVisible(false);
252
- setSelectedOption(OPTION_TYPES.FORWARD);
253
- };
254
-
255
- const onAddAttachmentsClickHandler = () => {
256
- if (!isAttachmentsVisible && attachmentsCount > 0) {
257
- // When attachments are not visible but there are few attachments then we no need to show the upload modal.
258
- } else {
259
- onAttachment();
260
- }
261
- setIsEmailFieldsVisible(false);
262
- setIsAttachmentsVisible(true);
263
- };
264
-
265
- const onActionHandler = useCallback(() => {
266
- ({
267
- [OPTION_TYPES.REPLY]: () => {
268
- onReply({
269
- toEmails,
270
- ccEmails,
271
- bccEmails,
272
- ...convertMentionsToHTMLAndPlainText({ suggestions, value }),
273
- });
274
- },
275
- [OPTION_TYPES.NOTE]: () => {
276
- onAddNote({
277
- toEmails,
278
- ccEmails,
279
- bccEmails,
280
- ...convertMentionsToHTMLAndPlainText({ suggestions, value }),
281
- });
282
- },
283
- [OPTION_TYPES.FORWARD]: () => {
284
- onForward({
285
- toEmails: toEmailsForForward,
286
- ccEmails,
287
- bccEmails,
288
- ...convertMentionsToHTMLAndPlainText({ suggestions, value }),
289
- });
290
- },
291
- }[selectedOption]());
292
- }, [
293
- bccEmails,
294
- ccEmails,
295
- onAddNote,
296
- onForward,
297
- onReply,
298
- selectedOption,
299
- suggestions,
300
- toEmails,
301
- value,
302
- ]);
303
-
304
- const shouldShowExpandAndMinimizeButton =
305
- attachmentsCount > 0 || toEmails.length > 0;
306
-
307
- const shouldDisableWhenForwardAndToFieldMissing =
308
- isForwardOptionSelected && toEmailsForForward.length === 0;
309
-
310
- return (
311
- <Container>
312
- <LineLoader
313
- backgroundColor={theme.colors.background.grey400}
314
- isLoading={isLoading}
315
- />
316
- <Container
317
- bg={isNoteOptionSelected ? "background.oldLace" : "transparent"}
318
- p={moderateScale(5)}
319
- pt={0}
320
- px={moderateScale(16)}
321
- >
322
- <Container pt={moderateScale(8)}>
323
- <EmailFields
324
- bccEmails={bccEmails}
325
- ccEmails={ccEmails}
326
- isEmailFieldsVisible={isEmailFieldsVisible}
327
- isForwardOptionSelected={isForwardOptionSelected}
328
- isNoteOptionSelected={isNoteOptionSelected}
329
- isReplyOptionSelected={isReplyOptionSelected}
330
- setBccEmails={setBccEmails}
331
- setCcEmails={setCcEmails}
332
- setIsEmailFieldsVisible={setIsEmailFieldsVisible}
333
- setToEmails={setToEmails}
334
- setToEmailsForForward={setToEmailsForForward}
335
- shouldShowEmailFields={shouldShowEmailFields}
336
- toEmails={toEmails}
337
- toEmailsForForward={toEmailsForForward}
338
- />
339
- <Container flexDirection="row" justifyContent="space-between">
340
- <MentionsInputWrapper
341
- placeholder={placeholders[selectedOption]}
342
- ref={inputRef}
343
- suggestions={suggestions}
344
- value={value}
345
- shouldShowSuggestions={showSuggestionsFor.includes(
346
- selectedOption
347
- )}
348
- onChange={onChangeText}
349
- onTouchStart={hideEmailFieldsAndAttachments}
350
- {...rest}
351
- />
352
- <Container alignSelf="center">
353
- {shouldShowExpandAndMinimizeButton &&
354
- (isEmailFieldsVisible || isAttachmentsVisible ? (
355
- <IconButton
356
- Icon={MinimizeSVG}
357
- height={moderateScale(30)}
358
- pt={moderateScale(8)}
359
- width={moderateScale(30)}
360
- onPress={hideEmailFieldsAndAttachments}
361
- />
362
- ) : (
363
- <IconButton
364
- Icon={ExpandSVG}
365
- height={moderateScale(30)}
366
- pt={moderateScale(8)}
367
- width={moderateScale(30)}
368
- onPress={showEmailFieldsAndAttachments}
369
- />
370
- ))}
371
- </Container>
372
- </Container>
373
- <AttachmentsView
374
- Attachments={Attachments}
375
- attachmentsCount={attachmentsCount}
376
- isAttachmentsVisible={isAttachmentsVisible}
377
- isNoteOptionSelected={isNoteOptionSelected}
378
- setIsAttachmentsVisible={setIsAttachmentsVisible}
379
- />
380
- <Container
381
- alignItems="center"
382
- flexDirection="row"
383
- justifyContent="space-between"
384
- mt={moderateScale(10)}
385
- >
386
- <Container flexDirection="row" justifyContent="space-between">
387
- <IconButton
388
- Icon={ChatBubble}
389
- opacity={isReplyOptionSelected ? 1 : 0.5}
390
- pl={moderateScale(10)}
391
- iconProps={{
392
- viewBox: "0 0 37 37",
393
- size: moderateScale(30),
394
- color: theme.colors.font.grey500,
395
- }}
396
- onPress={onReplyClickHandler}
397
- />
398
- <IconButton
399
- Icon={Notes}
400
- opacity={isNoteOptionSelected ? 1 : 0.5}
401
- onPress={onAddNoteClickHandler}
402
- />
403
- {onForward && (
404
- <IconButton
405
- Icon={Forward}
406
- opacity={isForwardOptionSelected ? 1 : 0.5}
407
- onPress={onAddForwardClickHandler}
408
- />
409
- )}
410
- <Container
411
- bg="background.grey400"
412
- mx={moderateScale(5)}
413
- p={moderateScale(0.4)}
414
- />
415
- {onCannedResponse &&
416
- showCannedResponsesFor.includes(selectedOption) && (
417
- <IconButton
418
- Icon={CannedResponses}
419
- opacity={0.5}
420
- iconProps={{
421
- viewBox: "0 0 38 38",
422
- size: moderateScale(30),
423
- }}
424
- onPress={onCannedResponse}
425
- />
426
- )}
427
- <IconButton
428
- Icon={Attachment}
429
- opacity={0.5}
430
- onPress={onAddAttachmentsClickHandler}
431
- />
432
- </Container>
433
- <Container alignItems="center" flexDirection="row">
434
- <Button
435
- height={moderateScale(30)}
436
- label={labels[selectedOption]}
437
- pr={0}
438
- variant="text"
439
- disabled={
440
- shouldDisableWhenForwardAndToFieldMissing || disabled
441
- }
442
- labelStyle={{
443
- mx: moderateScale(0),
444
- }}
445
- onPress={onActionHandler}
446
- />
447
- {showReplyMenuOptions && isReplyOptionSelected && (
448
- <Popover
449
- data={moreReplyOptions}
450
- from={
451
- <Button
452
- disabled={disabled}
453
- height={moderateScale(30)}
454
- label=""
455
- p={0}
456
- variant="text"
457
- RightIcon={() => (
458
- <Down
459
- color={theme.colors.background.grey800}
460
- size={moderateScale(22)}
461
- />
462
- )}
463
- />
464
- }
465
- />
466
- )}
467
- </Container>
468
- </Container>
469
- </Container>
470
- </Container>
471
- </Container>
472
- );
473
- }
474
- );
475
-
476
- ChatInput.displayName = "ChatInput";
477
- ChatInput.propTypes = {
478
- /**
479
- * If true, Shows loader
480
- */
481
- isLoading: PropTypes.bool,
482
- /**
483
- * If true, Shows to, cc and bcc email inputs.
484
- */
485
- shouldShowEmailFields: PropTypes.bool,
486
- /**
487
- * If true, Shows reply menu options
488
- */
489
- showReplyMenuOptions: PropTypes.bool,
490
- /**
491
- * Value to make input component controllable.
492
- */
493
- value: PropTypes.string,
494
- /**
495
- * To set the initial selected option
496
- */
497
- initialSelectedOption: PropTypes.oneOf(Object.values(OPTION_TYPES)),
498
- /**
499
- * Callback to be called when user selection option.
500
- */
501
- onOptionChange: PropTypes.func,
502
- /**
503
- * Callback to be called when the input text changes.
504
- */
505
- onChangeText: PropTypes.func,
506
- /**
507
- * Callback to be called on click of forward icon.
508
- */
509
- onForward: PropTypes.func,
510
- /**
511
- * Callback to be called on click of canned responses icon.
512
- */
513
- onCannedResponse: PropTypes.func,
514
- /**
515
- * Email list separated by comma.
516
- */
517
- toEmails: PropTypes.arrayOf(PropTypes.string),
518
- /**
519
- * Callback to be called on click of reply icon.
520
- */
521
- onReply: PropTypes.func,
522
- /**
523
- * Callback to be called on click of add note icon.
524
- */
525
- onAddNote: PropTypes.func,
526
- /**
527
- * Callback to be called on click of attachment icon.
528
- */
529
- onAttachment: PropTypes.func,
530
- /**
531
- * Count of attachments.
532
- */
533
- attachmentsCount: PropTypes.number,
534
- /**
535
- * Component to render attachments.
536
- */
537
- Attachments: PropTypes.any,
538
- /**
539
- * Array for options to show canned responses. Example: ["REPLY","NOTES","FORWARD"]
540
- */
541
- showCannedResponsesFor: PropTypes.arrayOf(
542
- PropTypes.oneOf(Object.values(OPTION_TYPES))
543
- ),
544
- /**
545
- * Array for options to show suggestions. Example: ["REPLY","NOTES","FORWARD"]
546
- */
547
- showSuggestionsFor: PropTypes.arrayOf(
548
- PropTypes.oneOf(Object.values(OPTION_TYPES))
549
- ),
550
- /**
551
- * If true, Disables the reply, forward and add note button.
552
- */
553
- disabled: PropTypes.bool,
554
- /**
555
- * List of mentions
556
- */
557
- suggestions: PropTypes.arrayOf(
558
- PropTypes.shape({
559
- name: PropTypes.string,
560
- imageUrl: PropTypes.string,
561
- id: PropTypes.string,
562
- })
563
- ),
564
- };
@@ -1,122 +0,0 @@
1
- import React from "react";
2
-
3
- import PropTypes from "prop-types";
4
- import Animated, { FadeInDown, FadeInUp } from "react-native-reanimated";
5
- import { moderateScale } from "react-native-size-matters";
6
-
7
- import { InputEmailChip } from "@components";
8
-
9
- import { Badge } from "./Badge";
10
-
11
- export const EmailFields = ({
12
- shouldShowEmailFields,
13
- setIsEmailFieldsVisible,
14
- isEmailFieldsVisible,
15
- toEmails,
16
- toEmailsForForward,
17
- ccEmails,
18
- bccEmails,
19
- setToEmails,
20
- setToEmailsForForward,
21
- setBccEmails,
22
- setCcEmails,
23
- isReplyOptionSelected,
24
- isNoteOptionSelected,
25
- isForwardOptionSelected,
26
- }) => {
27
- const firstToEmail = isReplyOptionSelected
28
- ? toEmails[0]
29
- : toEmailsForForward[0];
30
-
31
- let badge = "";
32
- if (firstToEmail) {
33
- badge = `To ${firstToEmail}`;
34
- } else if (isForwardOptionSelected) {
35
- badge = "Click here to enter email id.";
36
- }
37
-
38
- const totalEmailsMinus1 =
39
- toEmails.length +
40
- toEmailsForForward.length +
41
- ccEmails.length +
42
- bccEmails.length -
43
- 1;
44
-
45
- if (!shouldShowEmailFields) return null;
46
-
47
- return isEmailFieldsVisible ? (
48
- <Animated.View
49
- entering={FadeInDown}
50
- key={isEmailFieldsVisible}
51
- pb={moderateScale(10)}
52
- >
53
- {isReplyOptionSelected && (
54
- <InputEmailChip
55
- disabled
56
- emails={toEmails}
57
- label="To:"
58
- onUpdate={setToEmails}
59
- />
60
- )}
61
- {isForwardOptionSelected && (
62
- <InputEmailChip
63
- disabled={false}
64
- emails={toEmailsForForward}
65
- label="To:"
66
- onUpdate={setToEmailsForForward}
67
- />
68
- )}
69
- <InputEmailChip
70
- disabled={false}
71
- emails={ccEmails}
72
- label="Cc:"
73
- onUpdate={setCcEmails}
74
- />
75
- <InputEmailChip
76
- disabled={false}
77
- emails={bccEmails}
78
- label="Bcc:"
79
- onUpdate={setBccEmails}
80
- />
81
- </Animated.View>
82
- ) : (
83
- <Animated.View
84
- alignItems="flex-start"
85
- entering={FadeInUp}
86
- flexDirection="row"
87
- flexWrap="wrap"
88
- key={isEmailFieldsVisible}
89
- style={
90
- isNoteOptionSelected && {
91
- height: moderateScale(0),
92
- width: moderateScale(0),
93
- }
94
- }
95
- onTouchStart={() => setIsEmailFieldsVisible(true)}
96
- >
97
- {toEmails.length > 0 && (
98
- <>
99
- <Badge text={badge} />
100
- {totalEmailsMinus1 > 1 && <Badge text={`+ ${totalEmailsMinus1}`} />}
101
- </>
102
- )}
103
- </Animated.View>
104
- );
105
- };
106
-
107
- EmailFields.propTypes = {
108
- shouldShowEmailFields: PropTypes.bool,
109
- isEmailFieldsVisible: PropTypes.bool,
110
- setIsEmailFieldsVisible: PropTypes.func,
111
- ccEmails: PropTypes.arrayOf(PropTypes.string),
112
- toEmails: PropTypes.arrayOf(PropTypes.string),
113
- toEmailsForForward: PropTypes.arrayOf(PropTypes.string),
114
- bccEmails: PropTypes.arrayOf(PropTypes.string),
115
- setBccEmails: PropTypes.func,
116
- setCcEmails: PropTypes.func,
117
- setToEmails: PropTypes.func,
118
- setToEmailsForForward: PropTypes.func,
119
- isReplyOptionSelected: PropTypes.bool,
120
- isNoteOptionSelected: PropTypes.bool,
121
- isForwardOptionSelected: PropTypes.bool,
122
- };
@@ -1,34 +0,0 @@
1
- import React, { useContext } from "react";
2
-
3
- import PropTypes from "prop-types";
4
- import { moderateScale } from "react-native-size-matters";
5
- import { ThemeContext } from "styled-components/native";
6
-
7
- import { Touchable } from "@components";
8
-
9
- export const IconButton = ({ Icon, iconProps, ...rest }) => {
10
- const theme = useContext(ThemeContext);
11
-
12
- return (
13
- <Touchable
14
- alignItems="center"
15
- height={moderateScale(22)}
16
- px={moderateScale(18)}
17
- width={moderateScale(22)}
18
- {...rest}
19
- >
20
- {
21
- <Icon
22
- color={theme.colors.font.grey800}
23
- size={moderateScale(22)}
24
- {...iconProps}
25
- />
26
- }
27
- </Touchable>
28
- );
29
- };
30
-
31
- IconButton.propTypes = {
32
- Icon: PropTypes.elementType,
33
- iconProps: PropTypes.object,
34
- };