@plusscommunities/pluss-core-web 1.0.5 → 1.0.6

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 (62) hide show
  1. package/dist/index.cjs.js +7349 -1360
  2. package/dist/index.esm.js +7341 -1358
  3. package/dist/index.umd.js +7346 -1364
  4. package/package.json +5 -3
  5. package/src/actions/AuthActions.js +83 -0
  6. package/src/actions/UsersActions.js +65 -0
  7. package/src/actions/index.js +2 -2
  8. package/src/actions/types.js +9 -9
  9. package/src/analytics.js +73 -0
  10. package/src/apis/analyticsActions.js +49 -0
  11. package/src/apis/authActions.js +58 -0
  12. package/src/apis/fileActions.js +92 -94
  13. package/src/apis/index.js +7 -0
  14. package/src/apis/profileActions.js +133 -0
  15. package/src/apis/stringActions.js +25 -0
  16. package/src/apis/typeActions.js +186 -0
  17. package/src/apis/userActions.js +128 -0
  18. package/src/apis/utilityActions.js +35 -0
  19. package/src/colours.js +16 -16
  20. package/src/components/AnalyticsFilter.js +110 -0
  21. package/src/components/AudienceIncluder.js +174 -0
  22. package/src/components/AudienceSelector.js +549 -0
  23. package/src/components/CheckBox.js +77 -0
  24. package/src/components/DatePicker.js +268 -0
  25. package/src/components/DropdownInput.js +223 -0
  26. package/src/components/FileInput.js +314 -0
  27. package/src/components/ImageInput.js +971 -0
  28. package/src/components/MakerPopup.js +300 -0
  29. package/src/components/OptionsSection.js +64 -0
  30. package/src/components/P60Icon.js +40 -0
  31. package/src/components/ProfilePic.js +35 -0
  32. package/src/components/Reactions.js +77 -0
  33. package/src/components/Tag.js +62 -0
  34. package/src/components/TextFormatPopup.js +54 -0
  35. package/src/components/TimePicker.js +205 -0
  36. package/src/components/UserListing.js +64 -0
  37. package/src/components/index.js +23 -7
  38. package/src/components/svg-icons.json +6 -0
  39. package/src/config.js +10 -0
  40. package/src/helper/HelpDeskWidget.js +52 -0
  41. package/src/helper/api/getUrl.js +15 -0
  42. package/src/helper/api/getUrlParams.js +9 -0
  43. package/src/helper/api/safeReadParams.js +6 -0
  44. package/src/helper/colours.js/getAppColourFromState.js +10 -0
  45. package/src/helper/files/canvasImageUploader.js +159 -0
  46. package/src/helper/files/get1400.js +28 -0
  47. package/src/helper/files/getExtension.js +9 -0
  48. package/src/helper/files/getFileName.js +13 -0
  49. package/src/helper/files/getThumb300.js +32 -0
  50. package/src/helper/files/isVideo.js +8 -0
  51. package/src/{helper.js → helper/helper.js} +19 -130
  52. package/src/helper/index.js +29 -0
  53. package/src/helper/site/getSiteName.js +16 -0
  54. package/src/helper/site/getSiteNameFromRoles.js +12 -0
  55. package/src/helper/storage/readJSONFromStorage.js +9 -0
  56. package/src/helper/storage/setLocalStorage.js +5 -0
  57. package/src/helper/strings/isEmail.js +11 -0
  58. package/src/helper/strings/onlyAlphanumeric.js +8 -0
  59. package/src/helper/strings/randomString.js +10 -0
  60. package/src/helper/strings/toParagraphed.js +17 -0
  61. package/src/index.js +2 -1
  62. package/src/session.js +107 -107
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@plusscommunities/pluss-core-web",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Core extension package for Pluss Communities platform",
5
5
  "main": "dist/index.cjs.js",
6
6
  "scripts": {
7
- "build": "rollup -c",
8
- "upload": "npm version patch && npm publish --access public",
7
+ "build": "npm i && rollup -c",
8
+ "upload": "npm version patch && npm publish --access public && rm -rf node_modules",
9
9
  "test": "echo \"Error: no test specified\" && exit 1"
10
10
  },
11
11
  "author": "Phillip Suh",
@@ -26,8 +26,10 @@
26
26
  "dependencies": {
27
27
  "@babel/runtime": "^7.14.0",
28
28
  "lodash": "^4.17.4",
29
+ "jquery": "^3.2.1",
29
30
  "moment": "^2.18.1",
30
31
  "react": "^16.14.0",
32
+ "react-dropzone": "^7.0.1",
31
33
  "react-fontawesome": "^1.6.1",
32
34
  "react-redux": "^5.0.6",
33
35
  "react-textarea-autosize": "^7.1.0-1",
@@ -0,0 +1,83 @@
1
+ import { SET_AUTH, CHANGE_SITE, UPDATE_PROFILE, LOGOUT } from './types';
2
+ import { getEnabledFeatures } from '../session';
3
+ import { authActions, typeActions } from '../apis';
4
+
5
+ export const refreshAuthUser = (site) => {
6
+ return (dispatch) => {
7
+ const promises = [];
8
+ promises.push(authActions.getUserSignin());
9
+ promises.push(typeActions.getSite(site));
10
+ promises.push(typeActions.getInterfaces(site));
11
+
12
+ Promise.all(promises).then((res) => {
13
+ const userRes = res[0].data;
14
+ const siteSettingsRes = res[1].data;
15
+ const interfaces = res[2].data;
16
+ console.log(siteSettingsRes);
17
+ dispatch({
18
+ type: SET_AUTH,
19
+ payload: {
20
+ user: { ...userRes, uid: userRes.Id },
21
+ features: getEnabledFeatures(siteSettingsRes, interfaces),
22
+ hidden: [...(siteSettingsRes.Hidden || [])],
23
+ siteSettings: { ...(siteSettingsRes.Settings || {}) },
24
+ siteBranding: { ...(siteSettingsRes.Branding || {}) },
25
+ },
26
+ });
27
+ });
28
+ };
29
+ };
30
+
31
+ export const setAuth = (stuff) => {
32
+ return {
33
+ type: SET_AUTH,
34
+ payload: stuff,
35
+ };
36
+ };
37
+
38
+ export const setAuthUser = (auth, user, site) => {
39
+ return (dispatch) => {
40
+ if (!auth && !user && !site) {
41
+ dispatch({
42
+ type: LOGOUT,
43
+ payload: null,
44
+ });
45
+ }
46
+ dispatch({
47
+ type: SET_AUTH,
48
+ payload: {
49
+ auth,
50
+ user,
51
+ site,
52
+ originalSite: site,
53
+ },
54
+ });
55
+ };
56
+ };
57
+
58
+ export const setRemember = (chooken) => {
59
+ return {
60
+ type: SET_AUTH,
61
+ payload: {
62
+ chooken,
63
+ },
64
+ };
65
+ };
66
+
67
+ export const setAuthLocation = (site) => {
68
+ console.log('setting auth location');
69
+ console.log(site);
70
+ return {
71
+ type: CHANGE_SITE,
72
+ payload: {
73
+ site,
74
+ },
75
+ };
76
+ };
77
+
78
+ export const updateProfile = (changes) => {
79
+ return {
80
+ type: UPDATE_PROFILE,
81
+ payload: changes,
82
+ };
83
+ };
@@ -0,0 +1,65 @@
1
+ import _ from 'lodash';
2
+ import Cookies from 'js-cookie';
3
+ import { USERS_LOADED, USER_REMOVED, USERS_PURGE, USERS_LOADING, USERS_RESIDENT_COUNT_SET } from './types';
4
+ import { userActions } from '../apis';
5
+
6
+ export const usersUpdate = (site) => {
7
+ return (dispatch) => {
8
+ userActions.fetchUsers(site).then((res) => {
9
+ if (res.userFetchFail) {
10
+ } else {
11
+ const currentSite = Cookies.get('site');
12
+ if (res.data != null && !_.isEmpty(res.data.results.Items) && res.data.results.Items[0].site === currentSite) {
13
+ const users = res.data.results.Items;
14
+ const allList = [];
15
+ Object.keys(users).forEach((userId) => {
16
+ allList.push({ ...users[userId], id: userId });
17
+ });
18
+ dispatch({
19
+ type: USERS_LOADED,
20
+ payload: allList,
21
+ });
22
+ } else {
23
+ dispatch({
24
+ type: USERS_LOADED,
25
+ payload: [],
26
+ });
27
+ }
28
+ }
29
+ });
30
+ };
31
+ };
32
+
33
+ export const getUserCount = (site) => {
34
+ return (dispatch) => {
35
+ dispatch({
36
+ type: USERS_LOADING,
37
+ });
38
+ userActions.getSiteResidentsCount(site).then((res) => {
39
+ dispatch({
40
+ type: USERS_RESIDENT_COUNT_SET,
41
+ payload: res.data.results,
42
+ });
43
+ });
44
+ };
45
+ };
46
+
47
+ export const usersLoaded = (events) => {
48
+ return {
49
+ type: USERS_LOADED,
50
+ payload: events,
51
+ };
52
+ };
53
+
54
+ export const userKey = (id) => {
55
+ return {
56
+ type: USER_REMOVED,
57
+ payload: id,
58
+ };
59
+ };
60
+
61
+ export const clearUsers = () => {
62
+ return {
63
+ type: USERS_PURGE,
64
+ };
65
+ };
@@ -1,5 +1,5 @@
1
1
  // export * from './AlertActions';
2
- // export * from './AuthActions';
2
+ export * from './AuthActions';
3
3
  // export * from './EventActions';
4
4
  // export * from './FeedbackActions';
5
5
  // export * from './FoodActions';
@@ -7,7 +7,7 @@
7
7
  // export * from './JobsActions';
8
8
  // export * from './KeysActions';
9
9
  export * from './LocalActions';
10
- // export * from './UsersActions';
10
+ export * from './UsersActions';
11
11
  // export * from './ContactsActions';
12
12
  // export * from './MapsActions';
13
13
  // export * from './MarketActions';
@@ -1,7 +1,7 @@
1
- // export const SET_AUTH = 'set_auth';
2
- // export const LOGOUT = 'LOGOUT';
3
- // export const CHANGE_SITE = 'CHANGE_SITE';
4
- // export const UPDATE_PROFILE = 'UPDATE_PROFILE';
1
+ export const SET_AUTH = 'set_auth';
2
+ export const LOGOUT = 'LOGOUT';
3
+ export const CHANGE_SITE = 'CHANGE_SITE';
4
+ export const UPDATE_PROFILE = 'UPDATE_PROFILE';
5
5
 
6
6
  // export const EVENTS_LOADED = 'events_loaded';
7
7
  // export const EVENTS_UPDATED = 'EVENTS_UPDATED';
@@ -51,11 +51,11 @@ export const ADD_RECENTLY_CREATED = 'ADD_RECENTLY_CREATED';
51
51
  // export const KEY_REMOVED = 'KEY_REMOVED';
52
52
  // export const KEYS_PURGE = 'KEYS_PURGE';
53
53
 
54
- // export const USERS_LOADED = 'USERS_LOADED';
55
- // export const USER_REMOVED = 'USER_REMOVED';
56
- // export const USERS_PURGE = 'USERS_PURGE';
57
- // export const USERS_LOADING = 'USERS_LOADING';
58
- // export const USERS_RESIDENT_COUNT_SET = 'USERS_RESIDENT_COUNT_SET';
54
+ export const USERS_LOADED = 'USERS_LOADED';
55
+ export const USER_REMOVED = 'USER_REMOVED';
56
+ export const USERS_PURGE = 'USERS_PURGE';
57
+ export const USERS_LOADING = 'USERS_LOADING';
58
+ export const USERS_RESIDENT_COUNT_SET = 'USERS_RESIDENT_COUNT_SET';
59
59
 
60
60
  // export const CONTACTS_LOADED = 'CONTACTS_LOADED';
61
61
  // export const CONTACT_REMOVED = 'CONTACT_REMOVED';
@@ -0,0 +1,73 @@
1
+ import _ from 'lodash';
2
+
3
+ export const compileStats = (stats) => {
4
+ const totalStats = {};
5
+ Object.keys(stats).forEach((id) => {
6
+ Object.keys(stats[id]).forEach((activityId) => {
7
+ if (Array.isArray(stats[id][activityId])) {
8
+ if (!totalStats[activityId]) {
9
+ totalStats[activityId] = [];
10
+ }
11
+ Array.prototype.push.apply(totalStats[activityId], stats[id][activityId]);
12
+ totalStats[activityId] = _.uniq(totalStats[activityId]);
13
+ } else {
14
+ if (!totalStats[activityId]) {
15
+ totalStats[activityId] = 0;
16
+ }
17
+ totalStats[activityId] += stats[id][activityId];
18
+ }
19
+ });
20
+ });
21
+ return totalStats;
22
+ };
23
+
24
+ export const getInsight = (stats, previousStats, source, key, activity) => {
25
+ let top = { Stats: { [activity]: 0 } };
26
+ Object.keys(stats).forEach((entityId) => {
27
+ if (stats[entityId][activity] && stats[entityId][activity] > top.Stats[activity]) {
28
+ const entity = _.find(source, (s) => {
29
+ return s[key] === entityId;
30
+ });
31
+ if (entity) {
32
+ top = { Stats: stats[entityId], Entity: entity };
33
+ }
34
+ }
35
+ });
36
+ if (top.Stats[activity] === 0) {
37
+ return null;
38
+ }
39
+ if (previousStats) {
40
+ top.PreviousStats = previousStats[top.Entity[key]];
41
+ }
42
+ return top;
43
+ };
44
+
45
+ export const getAnalyticsFilterOptions = () => {
46
+ return [
47
+ {
48
+ text: 'Yesterday',
49
+ dayCount: 1,
50
+ prevText: 'day before',
51
+ },
52
+ {
53
+ text: 'Last 7 days',
54
+ dayCount: 7,
55
+ prevText: 'previous 7 days',
56
+ },
57
+ {
58
+ text: 'Last 14 days',
59
+ dayCount: 14,
60
+ prevText: 'previous 14 days',
61
+ },
62
+ {
63
+ text: 'Last 30 days',
64
+ dayCount: 30,
65
+ prevText: 'previous 30 days',
66
+ },
67
+ {
68
+ text: 'Custom Range',
69
+ dayCount: 0,
70
+ prevText: 'previous * days',
71
+ },
72
+ ];
73
+ };
@@ -0,0 +1,49 @@
1
+ import { authedFunction } from '../session';
2
+ import { getUrl } from '../helper';
3
+
4
+ export const analyticsActions = {
5
+ log: (site, actionType, entityType, entityId, data) => {
6
+ return authedFunction({
7
+ method: 'POST',
8
+ url: getUrl('analytics', 'log'),
9
+ data: {
10
+ site,
11
+ actionType,
12
+ entityType,
13
+ entityId,
14
+ data,
15
+ },
16
+ });
17
+ },
18
+ getEntityStats: (entityId, entityType) => {
19
+ return authedFunction({
20
+ method: 'GET',
21
+ url: getUrl('analytics', 'getentity', { entityId, entityType }),
22
+ });
23
+ },
24
+ getActivityLog: (entityId, entityType, actionType, minTime, maxTime) => {
25
+ const query = { entityId, entityType, actionType };
26
+ if (minTime) {
27
+ query.minTime = minTime;
28
+ }
29
+ if (maxTime) {
30
+ query.maxTime = maxTime;
31
+ }
32
+ return authedFunction({
33
+ method: 'GET',
34
+ url: getUrl('analytics', 'activity', query),
35
+ });
36
+ },
37
+ getAggregateUserStats: (site) => {
38
+ return authedFunction({
39
+ method: 'GET',
40
+ url: getUrl('analytics', 'users', { site }),
41
+ });
42
+ },
43
+ getAggregateEntityStats: (site, type, minTime, maxTime) => {
44
+ return authedFunction({
45
+ method: 'GET',
46
+ url: getUrl('analytics', 'aggregate', { site, type, minTime, maxTime }),
47
+ });
48
+ },
49
+ };
@@ -0,0 +1,58 @@
1
+ import axios from 'axios';
2
+ import { getUrl } from '../helper';
3
+ import { authedFunction } from '../session';
4
+
5
+ export const authActions = {
6
+ checkUserAuth: (userId) => {
7
+ let url = getUrl('auth', 'checkUserAuth');
8
+ return authedFunction({
9
+ method: 'POST',
10
+ url,
11
+ data: {
12
+ userId,
13
+ },
14
+ });
15
+ },
16
+ fetchForgotPasswordId: (input) => {
17
+ return axios({
18
+ method: 'POST',
19
+ url: getUrl('auth', 'checkForgotUser'),
20
+ data: {
21
+ user: {
22
+ email: input,
23
+ phoneNumber: input,
24
+ },
25
+ },
26
+ headers: { authorization: 'GwegChicken' },
27
+ });
28
+ },
29
+ disableUser: (username, site) => {
30
+ let url = getUrl('users', 'testUserDisbale');
31
+ const request = {
32
+ method: 'POST',
33
+ url,
34
+ data: {
35
+ username,
36
+ site,
37
+ },
38
+ };
39
+ return authedFunction(request);
40
+ },
41
+ getUserSignin: async () => {
42
+ return authedFunction({
43
+ method: 'POST',
44
+ url: getUrl('auth', 'getUserSignin'),
45
+ });
46
+ },
47
+ copyDummy: (site) => {
48
+ let url = getUrl('auth', 'copyDummy');
49
+ const request = {
50
+ method: 'POST',
51
+ url,
52
+ data: {
53
+ site,
54
+ },
55
+ };
56
+ return authedFunction(request);
57
+ },
58
+ };
@@ -1,13 +1,13 @@
1
1
  import { getCurrentUserSub, authedFunction } from '../session';
2
2
  import Config from '../config';
3
3
  import { Storage } from 'aws-amplify';
4
- // import CanvasImageUploader from '../helper/canvasImageUploader';
5
- // import $ from 'jquery';
4
+ import CanvasImageUploader from '../helper/files/canvasImageUploader';
5
+ import $ from 'jquery';
6
6
  import {
7
7
  //generateImageName,
8
8
  randomString,
9
+ getUrl,
9
10
  } from '../helper';
10
- // import { getUrl } from './helper';
11
11
 
12
12
  export const fileActions = {
13
13
  uploadMediaAsync: async (file, filename) => {
@@ -34,28 +34,28 @@ export const fileActions = {
34
34
  // };
35
35
  // });
36
36
  // },
37
- // compressImage: (file, maxSize, quality, noCompress) => {
38
- // return new Promise((resolve, reject) => {
39
- // if (noCompress) {
40
- // resolve(file);
41
- // return;
42
- // }
43
- // var $canvas = $('<canvas>');
44
- // $canvas.css('display', 'none');
45
- // $('body').append($canvas);
37
+ compressImage: (file, maxSize, quality, noCompress) => {
38
+ return new Promise((resolve, reject) => {
39
+ if (noCompress) {
40
+ resolve(file);
41
+ return;
42
+ }
43
+ var $canvas = $('<canvas>');
44
+ $canvas.css('display', 'none');
45
+ $('body').append($canvas);
46
46
 
47
- // var canvasUploader = new CanvasImageUploader({
48
- // maxSize: maxSize,
49
- // jpegQuality: quality,
50
- // });
47
+ var canvasUploader = new CanvasImageUploader({
48
+ maxSize: maxSize,
49
+ jpegQuality: quality,
50
+ });
51
51
 
52
- // canvasUploader.readImageToCanvas(file, $canvas, function () {
53
- // canvasUploader.saveCanvasToImageData($canvas[0]);
54
- // console.log(file);
55
- // resolve(fileActions.blobToFile(canvasUploader.getImageData(), file.name));
56
- // });
57
- // });
58
- // },
52
+ canvasUploader.readImageToCanvas(file, $canvas, function () {
53
+ canvasUploader.saveCanvasToImageData($canvas[0]);
54
+ console.log(file);
55
+ resolve(fileActions.blobToFile(canvasUploader.getImageData(), file.name));
56
+ });
57
+ });
58
+ },
59
59
  // blobToFile: (theBlob, fileName) => {
60
60
  // const file = new File([theBlob], fileName, { lastModified: new Date() });
61
61
  // console.log(file);
@@ -83,75 +83,73 @@ export const fileActions = {
83
83
  // });
84
84
  // });
85
85
  // },
86
- // getMediaFolders: (site) => {
87
- // // console.log('getMediaFolders', 'site', site);
88
- // const query = { site };
89
- // return authedFunction({
90
- // method: 'GET',
91
- // url: getUrl('media', 'folders', query),
92
- // });
93
- // },
94
- // addMediaFolder: (site, name) => {
95
- // return authedFunction({
96
- // method: 'POST',
97
- // url: getUrl('media', 'addFolder'),
98
- // data: {
99
- // site,
100
- // name,
101
- // },
102
- // });
103
- // },
104
- // updateMediaFolder: (id, site, name, published) => {
105
- // // console.log('updateMediaFolder', 'id', id, 'site', site, 'name', name, 'published', published);
106
- // return authedFunction({
107
- // method: 'POST',
108
- // url: getUrl('media', 'updateFolder'),
109
- // data: {
110
- // id,
111
- // site,
112
- // name,
113
- // published,
114
- // },
115
- // });
116
- // },
117
- // deleteMediaFolder: (id, site) => {
118
- // return authedFunction({
119
- // method: 'POST',
120
- // url: getUrl('media', 'deleteFolder'),
121
- // data: {
122
- // id,
123
- // site,
124
- // },
125
- // });
126
- // },
127
- // addImagesToFolder: (id, site, images) => {
128
- // // console.log('addImagesToFolder', 'id', id, 'site', site, 'images', images);
129
- // return authedFunction({
130
- // method: 'POST',
131
- // url: getUrl('media', 'addImages'),
132
- // data: {
133
- // id,
134
- // site,
135
- // images,
136
- // },
137
- // });
138
- // },
139
- // deleteImagesFromFolder: (id, site, images) => {
140
- // // console.log('deleteImagesFromFolder', 'id', id, 'site', site, 'images', images);
141
- // return authedFunction({
142
- // method: 'POST',
143
- // url: getUrl('media', 'deleteImages'),
144
- // data: {
145
- // id,
146
- // site,
147
- // images,
148
- // },
149
- // });
150
- // },
151
- // getMediaLibrary: () => {
152
- // return authedFunction({
153
- // method: 'GET',
154
- // url: 'https://pluss60.pluss60-api.com/media-demo/library',
155
- // });
156
- // },
86
+ getMediaFolders: (site) => {
87
+ // console.log('getMediaFolders', 'site', site);
88
+ const query = { site };
89
+ return authedFunction({
90
+ method: 'GET',
91
+ url: getUrl('media', 'folders', query),
92
+ });
93
+ },
94
+ addMediaFolder: (site, name) => {
95
+ return authedFunction({
96
+ method: 'POST',
97
+ url: getUrl('media', 'addFolder'),
98
+ data: {
99
+ site,
100
+ name,
101
+ },
102
+ });
103
+ },
104
+ updateMediaFolder: (id, site, name, published) => {
105
+ // console.log('updateMediaFolder', 'id', id, 'site', site, 'name', name, 'published', published);
106
+ return authedFunction({
107
+ method: 'POST',
108
+ url: getUrl('media', 'updateFolder'),
109
+ data: {
110
+ id,
111
+ site,
112
+ name,
113
+ published,
114
+ },
115
+ });
116
+ },
117
+ deleteMediaFolder: (id, site) => {
118
+ return authedFunction({
119
+ method: 'POST',
120
+ url: getUrl('media', 'deleteFolder'),
121
+ data: {
122
+ id,
123
+ site,
124
+ },
125
+ });
126
+ },
127
+ addImagesToFolder: (id, site, images) => {
128
+ return authedFunction({
129
+ method: 'POST',
130
+ url: getUrl('media', 'addImages'),
131
+ data: {
132
+ id,
133
+ site,
134
+ images,
135
+ },
136
+ });
137
+ },
138
+ deleteImagesFromFolder: (id, site, images) => {
139
+ return authedFunction({
140
+ method: 'POST',
141
+ url: getUrl('media', 'deleteImages'),
142
+ data: {
143
+ id,
144
+ site,
145
+ images,
146
+ },
147
+ });
148
+ },
149
+ getMediaLibrary: () => {
150
+ return authedFunction({
151
+ method: 'GET',
152
+ url: 'https://pluss60.pluss60-api.com/media-demo/library',
153
+ });
154
+ },
157
155
  };