@plusscommunities/pluss-circles-app-groups 1.2.2-beta.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 (130) hide show
  1. package/dist/module/actions/ChatActions.js +81 -0
  2. package/dist/module/actions/ChatActions.js.map +1 -0
  3. package/dist/module/actions/GroupActions.js +335 -0
  4. package/dist/module/actions/GroupActions.js.map +1 -0
  5. package/dist/module/actions/index.js +41 -0
  6. package/dist/module/actions/index.js.map +1 -0
  7. package/dist/module/actions/types.js +26 -0
  8. package/dist/module/actions/types.js.map +1 -0
  9. package/dist/module/assets/fonts.js +3 -0
  10. package/dist/module/assets/fonts.js.map +1 -0
  11. package/dist/module/components/chat/Chat.js +613 -0
  12. package/dist/module/components/chat/Chat.js.map +1 -0
  13. package/dist/module/components/chat/ChatList.js +557 -0
  14. package/dist/module/components/chat/ChatList.js.map +1 -0
  15. package/dist/module/components/chat/ContactsList.js +204 -0
  16. package/dist/module/components/chat/ContactsList.js.map +1 -0
  17. package/dist/module/components/chat/KioskPeoplePage.js +345 -0
  18. package/dist/module/components/chat/KioskPeoplePage.js.map +1 -0
  19. package/dist/module/components/chat/PeopleContainer.js +24 -0
  20. package/dist/module/components/chat/PeopleContainer.js.map +1 -0
  21. package/dist/module/components/chat/PeoplePage.js +438 -0
  22. package/dist/module/components/chat/PeoplePage.js.map +1 -0
  23. package/dist/module/components/common/index.js +26 -0
  24. package/dist/module/components/common/index.js.map +1 -0
  25. package/dist/module/components/events/EventInvitePopup.js +563 -0
  26. package/dist/module/components/events/EventInvitePopup.js.map +1 -0
  27. package/dist/module/components/groups/EditGroup.js +548 -0
  28. package/dist/module/components/groups/EditGroup.js.map +1 -0
  29. package/dist/module/components/groups/GroupDetails.js +388 -0
  30. package/dist/module/components/groups/GroupDetails.js.map +1 -0
  31. package/dist/module/components/groups/GroupsList.js +111 -0
  32. package/dist/module/components/groups/GroupsList.js.map +1 -0
  33. package/dist/module/components/groups/GroupsWidget.js +150 -0
  34. package/dist/module/components/groups/GroupsWidget.js.map +1 -0
  35. package/dist/module/components/groups/NewGroup.js +703 -0
  36. package/dist/module/components/groups/NewGroup.js.map +1 -0
  37. package/dist/module/components/groups/PublicGroup.js +131 -0
  38. package/dist/module/components/groups/PublicGroup.js.map +1 -0
  39. package/dist/module/components/groups/PublicGroupAction.js +296 -0
  40. package/dist/module/components/groups/PublicGroupAction.js.map +1 -0
  41. package/dist/module/components/notifications/GroupInvite.js +166 -0
  42. package/dist/module/components/notifications/GroupInvite.js.map +1 -0
  43. package/dist/module/components/notifications/GroupInviteAction.js +338 -0
  44. package/dist/module/components/notifications/GroupInviteAction.js.map +1 -0
  45. package/dist/module/components/notifications/GroupMessage.js +131 -0
  46. package/dist/module/components/notifications/GroupMessage.js.map +1 -0
  47. package/dist/module/components/takeover/TakeoverBackground.js +27 -0
  48. package/dist/module/components/takeover/TakeoverBackground.js.map +1 -0
  49. package/dist/module/config/index.js +9 -0
  50. package/dist/module/config/index.js.map +1 -0
  51. package/dist/module/core.config.js +17 -0
  52. package/dist/module/core.config.js.map +1 -0
  53. package/dist/module/feature.config.js +266 -0
  54. package/dist/module/feature.config.js.map +1 -0
  55. package/dist/module/index.js +27 -0
  56. package/dist/module/index.js.map +1 -0
  57. package/dist/module/js/Colors.js +17 -0
  58. package/dist/module/js/Colors.js.map +1 -0
  59. package/dist/module/js/NavigationService.js +8 -0
  60. package/dist/module/js/NavigationService.js.map +1 -0
  61. package/dist/module/js/Styles.js +3 -0
  62. package/dist/module/js/Styles.js.map +1 -0
  63. package/dist/module/js/circles/MapStateToDirectMessages.js +11 -0
  64. package/dist/module/js/circles/MapStateToDirectMessages.js.map +1 -0
  65. package/dist/module/js/index.js +21 -0
  66. package/dist/module/js/index.js.map +1 -0
  67. package/dist/module/reducers/ChatsReducer.js +82 -0
  68. package/dist/module/reducers/ChatsReducer.js.map +1 -0
  69. package/dist/module/reducers/GroupsReducer.js +174 -0
  70. package/dist/module/reducers/GroupsReducer.js.map +1 -0
  71. package/dist/module/reducers/reducerKeys.js +4 -0
  72. package/dist/module/reducers/reducerKeys.js.map +1 -0
  73. package/dist/module/values.config.default.js +33 -0
  74. package/dist/module/values.config.default.js.map +1 -0
  75. package/dist/module/values.config.groups.js +33 -0
  76. package/dist/module/values.config.groups.js.map +1 -0
  77. package/dist/module/values.config.js +33 -0
  78. package/dist/module/values.config.js.map +1 -0
  79. package/dist/module/webapi/circleActions.js +127 -0
  80. package/dist/module/webapi/circleActions.js.map +1 -0
  81. package/dist/module/webapi/helper.js +4 -0
  82. package/dist/module/webapi/helper.js.map +1 -0
  83. package/dist/module/webapi/index.js +7 -0
  84. package/dist/module/webapi/index.js.map +1 -0
  85. package/dist/module/webapi/messageActions.js +45 -0
  86. package/dist/module/webapi/messageActions.js.map +1 -0
  87. package/package.json +55 -0
  88. package/src/actions/ChatActions.js +92 -0
  89. package/src/actions/GroupActions.js +368 -0
  90. package/src/actions/index.js +43 -0
  91. package/src/actions/types.js +29 -0
  92. package/src/assets/fonts.js +3 -0
  93. package/src/components/chat/Chat.js +568 -0
  94. package/src/components/chat/ChatList.js +491 -0
  95. package/src/components/chat/ContactsList.js +168 -0
  96. package/src/components/chat/KioskPeoplePage.js +317 -0
  97. package/src/components/chat/PeopleContainer.js +21 -0
  98. package/src/components/chat/PeoplePage.js +418 -0
  99. package/src/components/common/index.js +26 -0
  100. package/src/components/events/EventInvitePopup.js +508 -0
  101. package/src/components/groups/EditGroup.js +486 -0
  102. package/src/components/groups/GroupDetails.js +335 -0
  103. package/src/components/groups/GroupsList.js +93 -0
  104. package/src/components/groups/GroupsWidget.js +134 -0
  105. package/src/components/groups/NewGroup.js +650 -0
  106. package/src/components/groups/PublicGroup.js +116 -0
  107. package/src/components/groups/PublicGroupAction.js +266 -0
  108. package/src/components/notifications/GroupInvite.js +154 -0
  109. package/src/components/notifications/GroupInviteAction.js +295 -0
  110. package/src/components/notifications/GroupMessage.js +114 -0
  111. package/src/components/takeover/TakeoverBackground.js +26 -0
  112. package/src/config/index.js +9 -0
  113. package/src/core.config.js +5 -0
  114. package/src/feature.config.js +274 -0
  115. package/src/index.js +24 -0
  116. package/src/js/Colors.js +17 -0
  117. package/src/js/NavigationService.js +9 -0
  118. package/src/js/Styles.js +3 -0
  119. package/src/js/circles/MapStateToDirectMessages.js +10 -0
  120. package/src/js/index.js +24 -0
  121. package/src/reducers/ChatsReducer.js +63 -0
  122. package/src/reducers/GroupsReducer.js +142 -0
  123. package/src/reducers/reducerKeys.js +4 -0
  124. package/src/values.config.default.js +39 -0
  125. package/src/values.config.groups.js +39 -0
  126. package/src/values.config.js +39 -0
  127. package/src/webapi/circleActions.js +104 -0
  128. package/src/webapi/helper.js +4 -0
  129. package/src/webapi/index.js +8 -0
  130. package/src/webapi/messageActions.js +39 -0
@@ -0,0 +1,563 @@
1
+ import React, { Component } from 'react';
2
+ import { Keyboard, Text, View, Modal, FlatList, TouchableWithoutFeedback } from 'react-native';
3
+ import _ from 'lodash';
4
+ import { connect } from 'react-redux';
5
+ import { TEXT_DARK, LINEGREY, COLOUR_GREEN, TEXT_LIGHT, getMainBrandingColourFromState } from '../../js/Colors';
6
+ import { UserListing, InlineButton, Spinner, GenericInput } from '../common';
7
+ import { addFollower, selectEventTime } from '../../actions';
8
+ import { eventActions, contactActions, userActions } from '../../webapi';
9
+ import { getSite, getValueOrDefault, usersToSearchResult, searchUsers } from '../../js';
10
+
11
+ class EventInvitePopup extends Component {
12
+ constructor(props) {
13
+ super(props);
14
+ this.state = {
15
+ invitePending: [],
16
+ displayedUsers: [],
17
+ inviteSent: [],
18
+ searchText: '',
19
+ source: []
20
+ };
21
+ }
22
+
23
+ UNSAFE_componentWillMount() {
24
+ this.onNextProps(this.props);
25
+
26
+ if (this.props.source && this.props.source === 'residents') {
27
+ if (this.props.user.category !== 'family') {
28
+ this.getResidentUsers();
29
+ }
30
+
31
+ this.getLinked();
32
+ } else {
33
+ this.getUsers();
34
+ }
35
+ }
36
+
37
+ UNSAFE_componentWillReceiveProps(nextProps) {
38
+ this.onNextProps(nextProps);
39
+ }
40
+
41
+ onNextProps(props) {
42
+ const newState = {};
43
+
44
+ if (!_.isEmpty(this.props.following) || props.following.length !== this.props.following.length) {
45
+ if (_.isEmpty(props.source)) {
46
+ newState.displayedUsers = props.following;
47
+ }
48
+
49
+ newState.following = props.following;
50
+ }
51
+
52
+ if (props.repId !== this.props.repId) {
53
+ newState.invitePending = [];
54
+ newState.inviteSent = [];
55
+ }
56
+
57
+ this.setState(newState);
58
+ }
59
+
60
+ onChangeSearch(value) {
61
+ this.buildList(this.state.source, value);
62
+ }
63
+
64
+ onUninviteUser(user) {
65
+ const userId = getValueOrDefault(user.id, user.userId);
66
+
67
+ if (!_.isUndefined(this.props.isNewEvent) && this.props.isNewEvent) {
68
+ this.props.onNewEventRemove({
69
+ userId,
70
+ profilePic: user.profilePic,
71
+ displayName: user.displayName
72
+ });
73
+ }
74
+ }
75
+
76
+ onInviteUser(user) {
77
+ Keyboard.dismiss();
78
+ const userId = getValueOrDefault(user.id, user.userId);
79
+
80
+ if (!_.isUndefined(this.props.isNewEvent) && this.props.isNewEvent) {
81
+ this.setState({
82
+ searchText: ''
83
+ });
84
+ this.props.onNewEventInvite({
85
+ userId,
86
+ profilePic: user.profilePic,
87
+ displayName: user.displayName
88
+ });
89
+ } else {
90
+ this.setState({
91
+ invitePending: [...this.state.invitePending, userId]
92
+ });
93
+ eventActions.sendEventInvite(getSite(this.props.site), this.props.myId, userId, this.props.event.Id, this.props.repId).then(() => {
94
+ const newPending = [...this.state.invitePending];
95
+ newPending.splice(newPending.indexOf(userId), 1);
96
+ this.setState({
97
+ invitePending: newPending,
98
+ inviteSent: [...this.state.inviteSent, userId]
99
+ }); // run success function
100
+
101
+ if (this.props.onInviteSuccess) this.props.onInviteSuccess();
102
+ }).catch(() => {
103
+ const newPending = [...this.state.invitePending];
104
+ newPending.splice(newPending.indexOf(userId), 1);
105
+ this.setState({
106
+ invitePending: newPending
107
+ });
108
+ });
109
+ }
110
+ }
111
+
112
+ onSubmitSearch() {
113
+ Keyboard.dismiss();
114
+ }
115
+
116
+ getRenderKey(user, userKey) {
117
+ if (user.id) {
118
+ return `${user.id}${userKey}`;
119
+ }
120
+
121
+ if (user.userId) {
122
+ return `${user.userId}${userKey}`;
123
+ }
124
+
125
+ return userKey;
126
+ }
127
+
128
+ getResidentUsers() {
129
+ contactActions.getSiteResidents(getSite(this.props.site)).then(res => {
130
+ const source = [...this.state.source, ...usersToSearchResult(_.sortBy(res.data.results.Items, 'displayName'), [])];
131
+ this.setState({
132
+ source
133
+ });
134
+ this.buildList(source, this.state.searchText);
135
+ });
136
+ }
137
+
138
+ getLinked() {
139
+ userActions.getLinkedUsers(this.props.user.uid).then(res => {
140
+ if (!_.isEmpty(res.data)) {
141
+ const source = [...this.state.source, ...usersToSearchResult(_.sortBy(res.data, 'displayName'), [])];
142
+ this.setState({
143
+ source
144
+ });
145
+ this.buildList(source, this.state.searchText);
146
+ }
147
+ });
148
+ userActions.getLinkedToMe(this.props.user.uid).then(res => {
149
+ if (!_.isEmpty(res.data) && !_.isEmpty(res.data.Items)) {
150
+ const source = [...this.state.source, ...usersToSearchResult(_.sortBy(res.data.Items, 'displayName'), [])];
151
+ this.setState({
152
+ source
153
+ });
154
+ this.buildList(source, this.state.searchText);
155
+ }
156
+ });
157
+ }
158
+
159
+ getUsers() {
160
+ userActions.getSiteUsers(getSite(this.props.user.site)).then(res => {
161
+ const source = usersToSearchResult(_.sortBy(res.data, 'displayName'), []);
162
+ this.setState({
163
+ source
164
+ });
165
+ this.buildList(source, this.state.searchText);
166
+ });
167
+ }
168
+
169
+ getStatusText(user) {
170
+ if (!this.props.showStatusText) {
171
+ return null;
172
+ }
173
+
174
+ const userId = getValueOrDefault(user.id, user.userId);
175
+
176
+ if (this.isInvited(userId)) {
177
+ return /*#__PURE__*/React.createElement(Text, {
178
+ style: {
179
+ color: TEXT_LIGHT
180
+ }
181
+ }, "Invited");
182
+ }
183
+
184
+ if (this.isAttending(userId)) {
185
+ return /*#__PURE__*/React.createElement(Text, {
186
+ style: {
187
+ color: COLOUR_GREEN
188
+ }
189
+ }, this.props.attendingStatusText || 'Attending');
190
+ }
191
+
192
+ if (this.props.declined && _.some(this.props.declined, u => {
193
+ return u.userId === userId;
194
+ })) {
195
+ return /*#__PURE__*/React.createElement(Text, {
196
+ style: {
197
+ color: TEXT_LIGHT
198
+ }
199
+ }, "Declined");
200
+ }
201
+
202
+ return null;
203
+ }
204
+
205
+ buildList(source, value) {
206
+ const newState = {
207
+ searchText: value
208
+ };
209
+
210
+ if (_.isEmpty(value)) {
211
+ newState.displayedUsers = source;
212
+ } else {
213
+ newState.displayedUsers = searchUsers(source, value);
214
+ }
215
+
216
+ this.setState(newState);
217
+ }
218
+
219
+ isAttending(userId) {
220
+ if (_.isUndefined(userId)) {
221
+ return false;
222
+ }
223
+
224
+ return _.some(this.props.attendees, user => {
225
+ const thisUserId = getValueOrDefault(user.id, user.userId);
226
+ return userId === thisUserId;
227
+ });
228
+ }
229
+
230
+ isInviting(userId) {
231
+ if (_.isUndefined(userId)) {
232
+ return false;
233
+ }
234
+
235
+ if (!_.isUndefined(this.props.inviting)) {
236
+ return _.some(this.props.inviting, followedUser => {
237
+ return userId === followedUser.userId;
238
+ });
239
+ }
240
+
241
+ return _.some(this.state.invitePending, followedUserId => {
242
+ return userId === followedUserId;
243
+ });
244
+ }
245
+
246
+ isInvited(userId) {
247
+ if (_.isUndefined(userId)) {
248
+ return false;
249
+ }
250
+
251
+ return _.some(this.props.invited, user => {
252
+ const thisUserId = getValueOrDefault(user.id, user.userId);
253
+ return userId === thisUserId;
254
+ });
255
+ }
256
+
257
+ isInviteSent(userId) {
258
+ if (_.isUndefined(userId)) {
259
+ return false;
260
+ }
261
+
262
+ return _.some(this.state.inviteSent, attendeeId => {
263
+ return userId === attendeeId;
264
+ });
265
+ }
266
+
267
+ renderSubText(user) {
268
+ if (!this.props.renderSubText) {
269
+ return null;
270
+ }
271
+
272
+ return this.props.renderSubText(user);
273
+ }
274
+
275
+ renderInviteButton(user) {
276
+ // already attending
277
+ const thisUserId = getValueOrDefault(user.id, user.userId);
278
+
279
+ if (this.isAttending(thisUserId)) {
280
+ if (this.props.editButtons) {
281
+ return /*#__PURE__*/React.createElement(InlineButton, {
282
+ onPress: this.onUninviteUser.bind(this, user),
283
+ color: "#fff",
284
+ style: [styles.friendsButton, {
285
+ borderColor: this.props.colourBrandingMain,
286
+ borderWidth: 1
287
+ }],
288
+ textStyle: {
289
+ color: this.props.colourBrandingMain
290
+ }
291
+ }, "Remove");
292
+ }
293
+
294
+ return /*#__PURE__*/React.createElement(InlineButton, {
295
+ color: "#fff",
296
+ style: [styles.friendsButton, {
297
+ borderColor: COLOUR_GREEN,
298
+ borderWidth: 1
299
+ }],
300
+ textStyle: {
301
+ color: COLOUR_GREEN
302
+ },
303
+ disabled: true
304
+ }, !_.isUndefined(this.props.attendingText) ? this.props.attendingText : 'Attending');
305
+ } // in process of invite
306
+
307
+
308
+ if (this.isInviting(thisUserId)) {
309
+ return /*#__PURE__*/React.createElement(InlineButton, {
310
+ color: "#fff",
311
+ style: [styles.friendsButton, {
312
+ borderColor: this.props.colourBrandingMain,
313
+ borderWidth: 1
314
+ }],
315
+ disabled: true,
316
+ noText: true
317
+ }, /*#__PURE__*/React.createElement(Spinner, {
318
+ size: 'small',
319
+ color: this.props.colourBrandingMain
320
+ }));
321
+ } // invite sent
322
+
323
+
324
+ if (this.isInviteSent(thisUserId)) {
325
+ return /*#__PURE__*/React.createElement(InlineButton, {
326
+ color: "#fff",
327
+ style: [styles.friendsButton, {
328
+ borderColor: TEXT_LIGHT,
329
+ borderWidth: 1
330
+ }],
331
+ textStyle: {
332
+ color: TEXT_LIGHT
333
+ },
334
+ disabled: true
335
+ }, "Invite sent");
336
+ } // invited
337
+
338
+
339
+ if (this.isInvited(thisUserId)) {
340
+ if (this.props.editButtons) {
341
+ return /*#__PURE__*/React.createElement(InlineButton, {
342
+ onPress: this.onUninviteUser.bind(this, user),
343
+ color: "#fff",
344
+ style: [styles.friendsButton, {
345
+ borderColor: TEXT_LIGHT,
346
+ borderWidth: 1
347
+ }],
348
+ textStyle: {
349
+ color: TEXT_LIGHT
350
+ }
351
+ }, "Un-invite");
352
+ }
353
+
354
+ return /*#__PURE__*/React.createElement(InlineButton, {
355
+ onPress: this.onUninviteUser.bind(this, user),
356
+ color: "#fff",
357
+ style: [styles.friendsButton, {
358
+ borderColor: TEXT_LIGHT,
359
+ borderWidth: 1
360
+ }],
361
+ textStyle: {
362
+ color: TEXT_LIGHT
363
+ },
364
+ disabled: _.isUndefined(this.props.isNewEvent) || !this.props.isNewEvent
365
+ }, this.props.invitedText || 'Invited');
366
+ } // nothing yet
367
+
368
+
369
+ return /*#__PURE__*/React.createElement(InlineButton, {
370
+ onPress: this.onInviteUser.bind(this, user),
371
+ color: "#fff",
372
+ style: [styles.friendsButton, {
373
+ borderColor: this.props.colourBrandingMain,
374
+ borderWidth: 1
375
+ }],
376
+ textStyle: {
377
+ color: this.props.colourBrandingMain
378
+ }
379
+ }, this.props.inviteText || 'Invite');
380
+ }
381
+
382
+ renderHeader() {
383
+ if (this.props.isSearchable) {
384
+ return /*#__PURE__*/React.createElement(View, {
385
+ style: [styles.titleContainer, this.props.titleContainerStyle]
386
+ }, /*#__PURE__*/React.createElement(View, {
387
+ style: [styles.titleContent, {
388
+ justifyContent: 'flex-start'
389
+ }, this.props.titleContentStyle]
390
+ }, /*#__PURE__*/React.createElement(GenericInput, {
391
+ icon: "search",
392
+ placeholder: 'Search people',
393
+ ref: "searchText",
394
+ value: this.state.searchText,
395
+ onChangeText: value => {
396
+ this.onChangeSearch(value);
397
+ },
398
+ onSubmitEditing: value => {
399
+ this.onSubmitSearch(value);
400
+ },
401
+ hasClear: true
402
+ })));
403
+ }
404
+
405
+ return /*#__PURE__*/React.createElement(View, {
406
+ style: [styles.titleContainer, this.props.titleContainerStyle]
407
+ }, /*#__PURE__*/React.createElement(View, {
408
+ style: [styles.titleContent, this.props.titleContentStyle]
409
+ }, /*#__PURE__*/React.createElement(Text, {
410
+ style: styles.title
411
+ }, "Invite friends")));
412
+ }
413
+
414
+ renderScrollContainer() {
415
+ return /*#__PURE__*/React.createElement(FlatList, {
416
+ style: {
417
+ width: '100%',
418
+ backgroundColor: '#fff'
419
+ },
420
+ data: this.state.displayedUsers,
421
+ renderItem: _ref => {
422
+ let {
423
+ item,
424
+ index
425
+ } = _ref;
426
+ return /*#__PURE__*/React.createElement(UserListing, {
427
+ user: item,
428
+ key: this.getRenderKey(item, index),
429
+ index: index,
430
+ rightContent: this.renderInviteButton(item),
431
+ statusText: this.getStatusText(item),
432
+ subText: this.renderSubText(item),
433
+ listItemStyle: this.props.listItemStyle,
434
+ onPressDisabled: true
435
+ });
436
+ },
437
+ keyExtractor: (item, index) => `${item.EntryId}_${index}`
438
+ });
439
+ }
440
+
441
+ renderFooter() {
442
+ if (!_.isUndefined(this.props.isNewEvent) && this.props.isNewEvent) {
443
+ return /*#__PURE__*/React.createElement(View, {
444
+ style: [styles.footer, {
445
+ padding: 8
446
+ }]
447
+ }, /*#__PURE__*/React.createElement(InlineButton, {
448
+ onPress: this.props.onClose.bind(this),
449
+ color: this.props.colourBrandingMain,
450
+ style: [styles.footerButton]
451
+ }, "Done"));
452
+ }
453
+
454
+ return null;
455
+ }
456
+
457
+ render() {
458
+ if (this.props.noPopup) {
459
+ return /*#__PURE__*/React.createElement(View, null, this.renderHeader(), this.renderScrollContainer());
460
+ }
461
+
462
+ return /*#__PURE__*/React.createElement(Modal, {
463
+ visible: this.props.visible,
464
+ transparent: true,
465
+ animationType: "slide",
466
+ onRequestClose: this.props.onClose
467
+ }, /*#__PURE__*/React.createElement(View, {
468
+ style: styles.popup
469
+ }, /*#__PURE__*/React.createElement(TouchableWithoutFeedback, {
470
+ onPress: this.props.onClose
471
+ }, /*#__PURE__*/React.createElement(View, {
472
+ style: styles.popupOverlay
473
+ })), /*#__PURE__*/React.createElement(View, {
474
+ style: styles.popupContent
475
+ }, this.renderHeader(), this.renderScrollContainer(), this.renderFooter())));
476
+ }
477
+
478
+ }
479
+
480
+ const styles = {
481
+ popup: {
482
+ flex: 1,
483
+ justifyContent: 'center'
484
+ },
485
+ popupOverlay: {
486
+ position: 'absolute',
487
+ backgroundColor: 'rgba(19, 19, 26, .25)',
488
+ top: 0,
489
+ left: 0,
490
+ right: 0,
491
+ bottom: 0
492
+ },
493
+ popupContent: {
494
+ borderRadius: 3,
495
+ marginTop: 150,
496
+ backgroundColor: '#fff',
497
+ flex: 1,
498
+ borderTopLeftRadius: 15,
499
+ borderTopRightRadius: 15
500
+ },
501
+ footer: {
502
+ padding: 16,
503
+ borderTopWidth: 1,
504
+ borderColor: LINEGREY,
505
+ backgroundColor: '#fff'
506
+ },
507
+ footerButton: {
508
+ width: '100%',
509
+ height: 40
510
+ },
511
+ timeButtonText: {
512
+ color: '#fff',
513
+ fontFamily: 'sf-semibold',
514
+ fontSize: 15
515
+ },
516
+ titleContainer: {
517
+ alignSelf: 'stretch',
518
+ padding: 24,
519
+ paddingTop: 16,
520
+ paddingBottom: 0
521
+ },
522
+ titleContent: {
523
+ borderColor: LINEGREY,
524
+ borderBottomWidth: 1,
525
+ flexDirection: 'row',
526
+ justifyContent: 'space-between',
527
+ paddingBottom: 15
528
+ },
529
+ friendsButton: {
530
+ width: 90,
531
+ height: 30,
532
+ marginVertical: 5,
533
+ paddingHorizontal: 7
534
+ },
535
+ title: {
536
+ fontSize: 15,
537
+ fontFamily: 'sf-semibold',
538
+ color: TEXT_DARK
539
+ },
540
+ semibold: {
541
+ fontFamily: 'sf-semibold'
542
+ },
543
+ optionsContainer: {
544
+ flex: 1,
545
+ paddingVertical: 8
546
+ }
547
+ };
548
+
549
+ const mapStateToProps = state => {
550
+ return {
551
+ following: state.followers.following,
552
+ myId: state.user.uid,
553
+ site: state.user.site,
554
+ user: state.user,
555
+ colourBrandingMain: getMainBrandingColourFromState(state)
556
+ };
557
+ };
558
+
559
+ export default connect(mapStateToProps, {
560
+ addFollower,
561
+ selectEventTime
562
+ })(EventInvitePopup);
563
+ //# sourceMappingURL=EventInvitePopup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Component","Keyboard","Text","View","Modal","FlatList","TouchableWithoutFeedback","_","connect","TEXT_DARK","LINEGREY","COLOUR_GREEN","TEXT_LIGHT","getMainBrandingColourFromState","UserListing","InlineButton","Spinner","GenericInput","addFollower","selectEventTime","eventActions","contactActions","userActions","getSite","getValueOrDefault","usersToSearchResult","searchUsers","EventInvitePopup","constructor","props","state","invitePending","displayedUsers","inviteSent","searchText","source","UNSAFE_componentWillMount","onNextProps","user","category","getResidentUsers","getLinked","getUsers","UNSAFE_componentWillReceiveProps","nextProps","newState","isEmpty","following","length","repId","setState","onChangeSearch","value","buildList","onUninviteUser","userId","id","isUndefined","isNewEvent","onNewEventRemove","profilePic","displayName","onInviteUser","dismiss","onNewEventInvite","sendEventInvite","site","myId","event","Id","then","newPending","splice","indexOf","onInviteSuccess","catch","onSubmitSearch","getRenderKey","userKey","getSiteResidents","res","sortBy","data","results","Items","getLinkedUsers","uid","getLinkedToMe","getSiteUsers","getStatusText","showStatusText","isInvited","color","isAttending","attendingStatusText","declined","some","u","attendees","thisUserId","isInviting","inviting","followedUser","followedUserId","invited","isInviteSent","attendeeId","renderSubText","renderInviteButton","editButtons","bind","styles","friendsButton","borderColor","colourBrandingMain","borderWidth","attendingText","invitedText","inviteText","renderHeader","isSearchable","titleContainer","titleContainerStyle","titleContent","justifyContent","titleContentStyle","title","renderScrollContainer","width","backgroundColor","item","index","listItemStyle","EntryId","renderFooter","footer","padding","onClose","footerButton","render","noPopup","visible","popup","popupOverlay","popupContent","flex","position","top","left","right","bottom","borderRadius","marginTop","borderTopLeftRadius","borderTopRightRadius","borderTopWidth","height","timeButtonText","fontFamily","fontSize","alignSelf","paddingTop","paddingBottom","borderBottomWidth","flexDirection","marginVertical","paddingHorizontal","semibold","optionsContainer","paddingVertical","mapStateToProps","followers"],"sources":["EventInvitePopup.js"],"sourcesContent":["import React, { Component } from 'react';\nimport { Keyboard, Text, View, Modal, FlatList, TouchableWithoutFeedback } from 'react-native';\nimport _ from 'lodash';\nimport { connect } from 'react-redux';\nimport { TEXT_DARK, LINEGREY, COLOUR_GREEN, TEXT_LIGHT, getMainBrandingColourFromState } from '../../js/Colors';\nimport { UserListing, InlineButton, Spinner, GenericInput } from '../common';\nimport { addFollower, selectEventTime } from '../../actions';\nimport { eventActions, contactActions, userActions } from '../../webapi';\nimport { getSite, getValueOrDefault, usersToSearchResult, searchUsers } from '../../js';\n\nclass EventInvitePopup extends Component {\n constructor(props) {\n super(props);\n this.state = {\n invitePending: [],\n displayedUsers: [],\n inviteSent: [],\n\n searchText: '',\n\n source: [],\n };\n }\n\n UNSAFE_componentWillMount() {\n this.onNextProps(this.props);\n\n if (this.props.source && this.props.source === 'residents') {\n if (this.props.user.category !== 'family') {\n this.getResidentUsers();\n }\n this.getLinked();\n } else {\n this.getUsers();\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.onNextProps(nextProps);\n }\n\n onNextProps(props) {\n const newState = {};\n if (!_.isEmpty(this.props.following) || props.following.length !== this.props.following.length) {\n if (_.isEmpty(props.source)) {\n newState.displayedUsers = props.following;\n }\n newState.following = props.following;\n }\n if (props.repId !== this.props.repId) {\n newState.invitePending = [];\n newState.inviteSent = [];\n }\n this.setState(newState);\n }\n\n onChangeSearch(value) {\n this.buildList(this.state.source, value);\n }\n\n onUninviteUser(user) {\n const userId = getValueOrDefault(user.id, user.userId);\n if (!_.isUndefined(this.props.isNewEvent) && this.props.isNewEvent) {\n this.props.onNewEventRemove({\n userId,\n profilePic: user.profilePic,\n displayName: user.displayName,\n });\n }\n }\n\n onInviteUser(user) {\n Keyboard.dismiss();\n const userId = getValueOrDefault(user.id, user.userId);\n if (!_.isUndefined(this.props.isNewEvent) && this.props.isNewEvent) {\n this.setState({ searchText: '' });\n this.props.onNewEventInvite({\n userId,\n profilePic: user.profilePic,\n displayName: user.displayName,\n });\n } else {\n this.setState({\n invitePending: [...this.state.invitePending, userId],\n });\n eventActions\n .sendEventInvite(getSite(this.props.site), this.props.myId, userId, this.props.event.Id, this.props.repId)\n .then(() => {\n const newPending = [...this.state.invitePending];\n newPending.splice(newPending.indexOf(userId), 1);\n this.setState({\n invitePending: newPending,\n inviteSent: [...this.state.inviteSent, userId],\n });\n // run success function\n if (this.props.onInviteSuccess) this.props.onInviteSuccess();\n })\n .catch(() => {\n const newPending = [...this.state.invitePending];\n newPending.splice(newPending.indexOf(userId), 1);\n this.setState({\n invitePending: newPending,\n });\n });\n }\n }\n\n onSubmitSearch() {\n Keyboard.dismiss();\n }\n\n getRenderKey(user, userKey) {\n if (user.id) {\n return `${user.id}${userKey}`;\n }\n if (user.userId) {\n return `${user.userId}${userKey}`;\n }\n return userKey;\n }\n\n getResidentUsers() {\n contactActions.getSiteResidents(getSite(this.props.site)).then(res => {\n const source = [...this.state.source, ...usersToSearchResult(_.sortBy(res.data.results.Items, 'displayName'), [])];\n this.setState({ source });\n this.buildList(source, this.state.searchText);\n });\n }\n\n getLinked() {\n userActions.getLinkedUsers(this.props.user.uid).then(res => {\n if (!_.isEmpty(res.data)) {\n const source = [...this.state.source, ...usersToSearchResult(_.sortBy(res.data, 'displayName'), [])];\n this.setState({ source });\n this.buildList(source, this.state.searchText);\n }\n });\n\n userActions.getLinkedToMe(this.props.user.uid).then(res => {\n if (!_.isEmpty(res.data) && !_.isEmpty(res.data.Items)) {\n const source = [...this.state.source, ...usersToSearchResult(_.sortBy(res.data.Items, 'displayName'), [])];\n this.setState({ source });\n this.buildList(source, this.state.searchText);\n }\n });\n }\n\n getUsers() {\n userActions.getSiteUsers(getSite(this.props.user.site)).then(res => {\n const source = usersToSearchResult(_.sortBy(res.data, 'displayName'), []);\n this.setState({ source });\n this.buildList(source, this.state.searchText);\n });\n }\n\n getStatusText(user) {\n if (!this.props.showStatusText) {\n return null;\n }\n const userId = getValueOrDefault(user.id, user.userId);\n if (this.isInvited(userId)) {\n return <Text style={{ color: TEXT_LIGHT }}>Invited</Text>;\n }\n if (this.isAttending(userId)) {\n return <Text style={{ color: COLOUR_GREEN }}>{this.props.attendingStatusText || 'Attending'}</Text>;\n }\n if (\n this.props.declined &&\n _.some(this.props.declined, u => {\n return u.userId === userId;\n })\n ) {\n return <Text style={{ color: TEXT_LIGHT }}>Declined</Text>;\n }\n return null;\n }\n\n buildList(source, value) {\n const newState = { searchText: value };\n if (_.isEmpty(value)) {\n newState.displayedUsers = source;\n } else {\n newState.displayedUsers = searchUsers(source, value);\n }\n\n this.setState(newState);\n }\n\n isAttending(userId) {\n if (_.isUndefined(userId)) {\n return false;\n }\n return _.some(this.props.attendees, user => {\n const thisUserId = getValueOrDefault(user.id, user.userId);\n return userId === thisUserId;\n });\n }\n\n isInviting(userId) {\n if (_.isUndefined(userId)) {\n return false;\n }\n if (!_.isUndefined(this.props.inviting)) {\n return _.some(this.props.inviting, followedUser => {\n return userId === followedUser.userId;\n });\n }\n return _.some(this.state.invitePending, followedUserId => {\n return userId === followedUserId;\n });\n }\n\n isInvited(userId) {\n if (_.isUndefined(userId)) {\n return false;\n }\n return _.some(this.props.invited, user => {\n const thisUserId = getValueOrDefault(user.id, user.userId);\n return userId === thisUserId;\n });\n }\n\n isInviteSent(userId) {\n if (_.isUndefined(userId)) {\n return false;\n }\n return _.some(this.state.inviteSent, attendeeId => {\n return userId === attendeeId;\n });\n }\n\n renderSubText(user) {\n if (!this.props.renderSubText) {\n return null;\n }\n return this.props.renderSubText(user);\n }\n\n renderInviteButton(user) {\n // already attending\n const thisUserId = getValueOrDefault(user.id, user.userId);\n if (this.isAttending(thisUserId)) {\n if (this.props.editButtons) {\n return (\n <InlineButton\n onPress={this.onUninviteUser.bind(this, user)}\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: this.props.colourBrandingMain, borderWidth: 1 }]}\n textStyle={{ color: this.props.colourBrandingMain }}\n >\n Remove\n </InlineButton>\n );\n }\n return (\n <InlineButton\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: COLOUR_GREEN, borderWidth: 1 }]}\n textStyle={{ color: COLOUR_GREEN }}\n disabled\n >\n {!_.isUndefined(this.props.attendingText) ? this.props.attendingText : 'Attending'}\n </InlineButton>\n );\n }\n\n // in process of invite\n if (this.isInviting(thisUserId)) {\n return (\n <InlineButton\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: this.props.colourBrandingMain, borderWidth: 1 }]}\n disabled\n noText\n >\n <Spinner size={'small'} color={this.props.colourBrandingMain} />\n </InlineButton>\n );\n }\n\n // invite sent\n if (this.isInviteSent(thisUserId)) {\n return (\n <InlineButton\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: TEXT_LIGHT, borderWidth: 1 }]}\n textStyle={{ color: TEXT_LIGHT }}\n disabled\n >\n Invite sent\n </InlineButton>\n );\n }\n\n // invited\n if (this.isInvited(thisUserId)) {\n if (this.props.editButtons) {\n return (\n <InlineButton\n onPress={this.onUninviteUser.bind(this, user)}\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: TEXT_LIGHT, borderWidth: 1 }]}\n textStyle={{ color: TEXT_LIGHT }}\n >\n Un-invite\n </InlineButton>\n );\n }\n return (\n <InlineButton\n onPress={this.onUninviteUser.bind(this, user)}\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: TEXT_LIGHT, borderWidth: 1 }]}\n textStyle={{ color: TEXT_LIGHT }}\n disabled={_.isUndefined(this.props.isNewEvent) || !this.props.isNewEvent}\n >\n {this.props.invitedText || 'Invited'}\n </InlineButton>\n );\n }\n\n // nothing yet\n return (\n <InlineButton\n onPress={this.onInviteUser.bind(this, user)}\n color=\"#fff\"\n style={[styles.friendsButton, { borderColor: this.props.colourBrandingMain, borderWidth: 1 }]}\n textStyle={{ color: this.props.colourBrandingMain }}\n >\n {this.props.inviteText || 'Invite'}\n </InlineButton>\n );\n }\n\n renderHeader() {\n if (this.props.isSearchable) {\n return (\n <View style={[styles.titleContainer, this.props.titleContainerStyle]}>\n <View style={[styles.titleContent, { justifyContent: 'flex-start' }, this.props.titleContentStyle]}>\n <GenericInput\n icon=\"search\"\n placeholder={'Search people'}\n ref=\"searchText\"\n value={this.state.searchText}\n onChangeText={value => {\n this.onChangeSearch(value);\n }}\n onSubmitEditing={value => {\n this.onSubmitSearch(value);\n }}\n hasClear\n />\n </View>\n </View>\n );\n }\n return (\n <View style={[styles.titleContainer, this.props.titleContainerStyle]}>\n <View style={[styles.titleContent, this.props.titleContentStyle]}>\n <Text style={styles.title}>Invite friends</Text>\n </View>\n </View>\n );\n }\n\n renderScrollContainer() {\n return (\n <FlatList\n style={{ width: '100%', backgroundColor: '#fff' }}\n data={this.state.displayedUsers}\n renderItem={({ item, index }) => {\n return (\n <UserListing\n user={item}\n key={this.getRenderKey(item, index)}\n index={index}\n rightContent={this.renderInviteButton(item)}\n statusText={this.getStatusText(item)}\n subText={this.renderSubText(item)}\n listItemStyle={this.props.listItemStyle}\n onPressDisabled\n />\n );\n }}\n keyExtractor={(item, index) => `${item.EntryId}_${index}`}\n />\n );\n }\n\n renderFooter() {\n if (!_.isUndefined(this.props.isNewEvent) && this.props.isNewEvent) {\n return (\n <View style={[styles.footer, { padding: 8 }]}>\n <InlineButton onPress={this.props.onClose.bind(this)} color={this.props.colourBrandingMain} style={[styles.footerButton]}>\n Done\n </InlineButton>\n </View>\n );\n }\n return null;\n }\n\n render() {\n if (this.props.noPopup) {\n return (\n <View>\n {this.renderHeader()}\n {this.renderScrollContainer()}\n </View>\n );\n }\n return (\n <Modal visible={this.props.visible} transparent animationType=\"slide\" onRequestClose={this.props.onClose}>\n <View style={styles.popup}>\n <TouchableWithoutFeedback onPress={this.props.onClose}>\n <View style={styles.popupOverlay} />\n </TouchableWithoutFeedback>\n <View style={styles.popupContent}>\n {this.renderHeader()}\n {this.renderScrollContainer()}\n {this.renderFooter()}\n </View>\n </View>\n </Modal>\n );\n }\n}\n\nconst styles = {\n popup: {\n flex: 1,\n justifyContent: 'center',\n },\n popupOverlay: {\n position: 'absolute',\n backgroundColor: 'rgba(19, 19, 26, .25)',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n },\n popupContent: {\n borderRadius: 3,\n marginTop: 150,\n backgroundColor: '#fff',\n flex: 1,\n borderTopLeftRadius: 15,\n borderTopRightRadius: 15,\n },\n footer: {\n padding: 16,\n borderTopWidth: 1,\n borderColor: LINEGREY,\n backgroundColor: '#fff',\n },\n footerButton: {\n width: '100%',\n height: 40,\n },\n timeButtonText: {\n color: '#fff',\n fontFamily: 'sf-semibold',\n fontSize: 15,\n },\n titleContainer: {\n alignSelf: 'stretch',\n padding: 24,\n paddingTop: 16,\n paddingBottom: 0,\n },\n titleContent: {\n borderColor: LINEGREY,\n borderBottomWidth: 1,\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingBottom: 15,\n },\n friendsButton: {\n width: 90,\n height: 30,\n marginVertical: 5,\n paddingHorizontal: 7,\n },\n title: {\n fontSize: 15,\n fontFamily: 'sf-semibold',\n color: TEXT_DARK,\n },\n semibold: {\n fontFamily: 'sf-semibold',\n },\n optionsContainer: {\n flex: 1,\n paddingVertical: 8,\n },\n};\n\nconst mapStateToProps = state => {\n return {\n following: state.followers.following,\n myId: state.user.uid,\n site: state.user.site,\n user: state.user,\n colourBrandingMain: getMainBrandingColourFromState(state),\n };\n};\n\nexport default connect(mapStateToProps, { addFollower, selectEventTime })(EventInvitePopup);\n"],"mappings":"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"}