be-components 5.1.0 → 5.1.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 (101) hide show
  1. package/lib/commonjs/ProfileManager/Components/VouchCard.js +6 -0
  2. package/lib/commonjs/ProfileManager/Components/VouchCard.js.map +1 -1
  3. package/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.js +93 -0
  4. package/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.js.map +1 -0
  5. package/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.js +56 -0
  6. package/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.js.map +1 -0
  7. package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.js +30 -0
  8. package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.js.map +1 -0
  9. package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.js +138 -0
  10. package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.js.map +1 -0
  11. package/lib/commonjs/SocialComponents/FormattedTextInput/index.js +189 -0
  12. package/lib/commonjs/SocialComponents/FormattedTextInput/index.js.map +1 -0
  13. package/lib/commonjs/SocialComponents/InputBar/index.js +50 -0
  14. package/lib/commonjs/SocialComponents/InputBar/index.js.map +1 -0
  15. package/lib/commonjs/SocialComponents/PostCard/index.js.map +1 -1
  16. package/lib/commonjs/SocialComponents/api/index.js +82 -4
  17. package/lib/commonjs/SocialComponents/api/index.js.map +1 -1
  18. package/lib/commonjs/SocialComponents/index.js +21 -0
  19. package/lib/commonjs/SocialComponents/index.js.map +1 -1
  20. package/lib/module/ProfileManager/Components/VouchCard.js +7 -1
  21. package/lib/module/ProfileManager/Components/VouchCard.js.map +1 -1
  22. package/lib/module/SocialComponents/FormattedTextInput/FormattedText.js +83 -0
  23. package/lib/module/SocialComponents/FormattedTextInput/FormattedText.js.map +1 -0
  24. package/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.js +49 -0
  25. package/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.js.map +1 -0
  26. package/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.js +23 -0
  27. package/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.js.map +1 -0
  28. package/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.js +130 -0
  29. package/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.js.map +1 -0
  30. package/lib/module/SocialComponents/FormattedTextInput/index.js +180 -0
  31. package/lib/module/SocialComponents/FormattedTextInput/index.js.map +1 -0
  32. package/lib/module/SocialComponents/InputBar/index.js +43 -0
  33. package/lib/module/SocialComponents/InputBar/index.js.map +1 -0
  34. package/lib/module/SocialComponents/PostCard/index.js.map +1 -1
  35. package/lib/module/SocialComponents/api/index.js +82 -3
  36. package/lib/module/SocialComponents/api/index.js.map +1 -1
  37. package/lib/module/SocialComponents/index.js +4 -1
  38. package/lib/module/SocialComponents/index.js.map +1 -1
  39. package/lib/typescript/lib/commonjs/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  40. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.d.ts +9 -0
  41. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.d.ts.map +1 -0
  42. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts +8 -0
  43. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts.map +1 -0
  44. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts +8 -0
  45. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts.map +1 -0
  46. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.d.ts +10 -0
  47. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map +1 -0
  48. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/index.d.ts +9 -0
  49. package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/index.d.ts.map +1 -0
  50. package/lib/typescript/lib/commonjs/SocialComponents/InputBar/index.d.ts +7 -0
  51. package/lib/typescript/lib/commonjs/SocialComponents/InputBar/index.d.ts.map +1 -0
  52. package/lib/typescript/lib/commonjs/SocialComponents/api/index.d.ts +7 -0
  53. package/lib/typescript/lib/commonjs/SocialComponents/api/index.d.ts.map +1 -1
  54. package/lib/typescript/lib/commonjs/SocialComponents/index.d.ts +7 -0
  55. package/lib/typescript/lib/module/Components/Spring.d.ts +1 -1
  56. package/lib/typescript/lib/module/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  57. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/FormattedText.d.ts +9 -0
  58. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/FormattedText.d.ts.map +1 -0
  59. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts +8 -0
  60. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts.map +1 -0
  61. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts +12 -0
  62. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts.map +1 -0
  63. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.d.ts +12 -0
  64. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map +1 -0
  65. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/index.d.ts +9 -0
  66. package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/index.d.ts.map +1 -0
  67. package/lib/typescript/lib/module/SocialComponents/InputBar/index.d.ts +7 -0
  68. package/lib/typescript/lib/module/SocialComponents/InputBar/index.d.ts.map +1 -0
  69. package/lib/typescript/lib/module/SocialComponents/api/index.d.ts +7 -0
  70. package/lib/typescript/lib/module/SocialComponents/api/index.d.ts.map +1 -1
  71. package/lib/typescript/lib/module/SocialComponents/index.d.ts +4 -1
  72. package/lib/typescript/lib/module/SocialComponents/index.d.ts.map +1 -1
  73. package/lib/typescript/src/ProfileManager/Components/VouchCard.d.ts.map +1 -1
  74. package/lib/typescript/src/SocialComponents/FormattedTextInput/FormattedText.d.ts +15 -0
  75. package/lib/typescript/src/SocialComponents/FormattedTextInput/FormattedText.d.ts.map +1 -0
  76. package/lib/typescript/src/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts +10 -0
  77. package/lib/typescript/src/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts.map +1 -0
  78. package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts +10 -0
  79. package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts.map +1 -0
  80. package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagSelector.d.ts +12 -0
  81. package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map +1 -0
  82. package/lib/typescript/src/SocialComponents/FormattedTextInput/index.d.ts +21 -0
  83. package/lib/typescript/src/SocialComponents/FormattedTextInput/index.d.ts.map +1 -0
  84. package/lib/typescript/src/SocialComponents/InputBar/index.d.ts +11 -0
  85. package/lib/typescript/src/SocialComponents/InputBar/index.d.ts.map +1 -0
  86. package/lib/typescript/src/SocialComponents/api/index.d.ts +9 -2
  87. package/lib/typescript/src/SocialComponents/api/index.d.ts.map +1 -1
  88. package/lib/typescript/src/SocialComponents/index.d.ts +4 -1
  89. package/lib/typescript/src/SocialComponents/index.d.ts.map +1 -1
  90. package/package.json +1 -1
  91. package/src/ProfileManager/Components/VouchCard.tsx +3 -2
  92. package/src/SocialComponents/FormattedTextInput/FormattedText.tsx +85 -0
  93. package/src/SocialComponents/FormattedTextInput/components/PlayerTag.tsx +33 -0
  94. package/src/SocialComponents/FormattedTextInput/components/TagRenderer.tsx +26 -0
  95. package/src/SocialComponents/FormattedTextInput/components/TagSelector.tsx +106 -0
  96. package/src/SocialComponents/FormattedTextInput/index.tsx +160 -0
  97. package/src/SocialComponents/InputBar/index.tsx +43 -0
  98. package/src/SocialComponents/PostCard/index.tsx +1 -1
  99. package/src/SocialComponents/api/index.ts +63 -4
  100. package/src/SocialComponents/index.tsx +7 -0
  101. package/src/types.d.ts +12 -1
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import type { TextTagProps } from '../../../types';
3
+ type TagSelectorProps = {
4
+ type: 'player';
5
+ visible: boolean;
6
+ working_tag: TextTagProps;
7
+ onCancel: () => void;
8
+ onSelectTag: (tag: TextTagProps) => void;
9
+ };
10
+ declare const TagSelector: ({ type, visible, working_tag, onSelectTag, onCancel }: TagSelectorProps) => React.JSX.Element;
11
+ export default TagSelector;
12
+ //# sourceMappingURL=TagSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagSelector.d.ts","sourceRoot":"","sources":["../../../../../../src/SocialComponents/FormattedTextInput/components/TagSelector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAqB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAItE,KAAK,gBAAgB,GAAG;IACpB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAC,OAAO,CAAC;IAChB,WAAW,EAAC,YAAY,CAAC;IACzB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAC,CAAC,GAAG,EAAC,YAAY,KAAK,IAAI,CAAA;CACzC,CAAA;AAED,QAAA,MAAM,WAAW,0DAA4D,gBAAgB,sBAyF5F,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import type { TextTagProps } from '../../types';
3
+ type FormattedTextInputProps = {
4
+ onChangeText?: (data: {
5
+ text: string;
6
+ formatted_text: any;
7
+ }) => void;
8
+ submit_title?: string;
9
+ init_data?: {
10
+ formatted_text: string;
11
+ text: string;
12
+ tags: TextTagProps[];
13
+ };
14
+ onSubmit: (data: {
15
+ text: string;
16
+ formatted_text: any;
17
+ }, tags: TextTagProps[]) => void;
18
+ };
19
+ declare const FormattedTextInput: ({ submit_title, init_data, onChangeText, onSubmit }: FormattedTextInputProps) => React.JSX.Element;
20
+ export default FormattedTextInput;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/SocialComponents/FormattedTextInput/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAIhD,KAAK,uBAAuB,GAAG;IAC3B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAC;QAAE,IAAI,EAAC,MAAM,CAAC;QAAC,cAAc,EAAC,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;IAClE,YAAY,CAAC,EAAC,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAC,IAAI,EAAC,YAAY,EAAE,CAAA;KAAE,CAAC;IACzE,QAAQ,EAAC,CAAC,IAAI,EAAC;QAAE,IAAI,EAAC,MAAM,CAAC;QAAC,cAAc,EAAC,GAAG,CAAA;KAAE,EAAE,IAAI,EAAC,YAAY,EAAE,KAAK,IAAI,CAAA;CACnF,CAAA;AAED,QAAA,MAAM,kBAAkB,wDAAwD,uBAAuB,sBA+ItG,CAAA;AAED,eAAe,kBAAkB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ type InputBarProps = {
3
+ actions: string[];
4
+ onImageUpload: (image: {
5
+ url: string;
6
+ [key: string]: any;
7
+ }) => void;
8
+ };
9
+ declare const InputBar: ({ actions, onImageUpload }: InputBarProps) => React.JSX.Element;
10
+ export default InputBar;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/SocialComponents/InputBar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,CAAC,KAAK,EAAE;QAAE,GAAG,EAAC,MAAM,CAAC;QAAC,CAAC,GAAG,EAAC,MAAM,GAAE,GAAG,CAAA;KAAE,KAAK,IAAI,CAAA;CACnE,CAAA;AAED,QAAA,MAAM,QAAQ,+BAAiC,aAAa,sBA4B3D,CAAA;AAED,eAAe,QAAQ,CAAA"}
@@ -1,5 +1,5 @@
1
- import type { AthleteProps, EventProps, LeagueProps, MatchProps, OrderProps, PlayerFollowerProps, PlayerPodcastEpisodeProps, PlayerPodcastProps, PodcastEpisodesProps, PodcastProps, PostReactionProps, TeamProps, TournamentProps } from "../../types";
2
- export { SocialComponentApi, SocialOrderHelpers, SocialPodcastHelpers };
1
+ import type { AthleteProps, EventProps, LeagueProps, MatchProps, OrderProps, PlayerFollowerProps, PlayerPodcastEpisodeProps, PlayerPodcastProps, PodcastEpisodesProps, PodcastProps, PostReactionProps, PublicPlayerProps, TextTagProps, TeamProps, TournamentProps } from "../../types";
2
+ export { SocialComponentApi, SocialOrderHelpers, SocialPodcastHelpers, SocialComponentHelpers };
3
3
  declare const SocialComponentApi: {
4
4
  setEnvironment: () => void;
5
5
  getLeagues: () => Promise<LeagueProps[]>;
@@ -7,6 +7,8 @@ declare const SocialComponentApi: {
7
7
  getBulkPlayerfollowers: (player_ids: string[]) => Promise<any>;
8
8
  savePlayerFollower: (player_follower: PlayerFollowerProps) => Promise<PlayerFollowerProps>;
9
9
  getEventsByEventIds: (event_ids: string[]) => Promise<EventProps[]>;
10
+ searchPlayerByUsername: (username: string) => Promise<PublicPlayerProps | undefined>;
11
+ searchPlayersByValue: (search_value: string, offset: number) => Promise<PublicPlayerProps[]>;
10
12
  getMatchesByMatchIds: (match_ids: string[]) => Promise<MatchProps[]>;
11
13
  getAthletesByIds: (athlete_ids: string[]) => Promise<AthleteProps[]>;
12
14
  getTournamentsByTournamentIds: (tournament_ids: string[]) => Promise<TournamentProps[]>;
@@ -48,6 +50,11 @@ declare const SocialOrderHelpers: {
48
50
  };
49
51
  getOddsLabel: (odds: number, decimals?: number) => string;
50
52
  };
53
+ declare const SocialComponentHelpers: {
54
+ extractTagsFromText: (text: string, cursor?: number) => TextTagProps[];
55
+ replaceText: (originalText: string, startIndex: number, endIndex: number, replacementText: string) => string;
56
+ compareTags: (valid_tags: TextTagProps[], tags: TextTagProps[]) => TextTagProps[];
57
+ };
51
58
  declare const SocialPodcastHelpers: {
52
59
  getPodcastImage: (podcast: PodcastProps) => string;
53
60
  getEpisodeImage: (podcast_episode?: PodcastEpisodesProps) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/SocialComponents/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQxP,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,CAAA;AAEvE,QAAA,MAAM,kBAAkB;;sBASA,OAAO,CAAC,WAAW,EAAE,CAAC;0BAQhB,UAAU,KAAE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;yCAQ5B,MAAM,EAAE;0CAIP,mBAAmB,KAAE,OAAO,CAAC,mBAAmB,CAAC;qCAItD,MAAM,EAAE,KAAE,OAAO,CAAC,UAAU,EAAE,CAAC;sCAS9B,MAAM,EAAE,KAAE,OAAO,CAAC,UAAU,EAAE,CAAC;oCAShC,MAAM,EAAE,KAAE,OAAO,CAAC,YAAY,EAAE,CAAC;oDASlB,MAAM,EAAE,KAAE,OAAO,CAAC,eAAe,EAAE,CAAC;8BAS1D,MAAM,EAAE;wCASE,iBAAiB,KAAE,OAAO,CAAC,iBAAiB,GAAC,SAAS,CAAC;wCAStD,iBAAiB,KAAE,OAAO,CAAC,iBAAiB,GAAC,SAAS,CAAC;iCAS/D,MAAM,KAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;gDAQ1B,MAAM,KAAE,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;kDAS/C,MAAM,KAAE,OAAO,CAAC,SAAS,GAAG;QAAE,cAAc,CAAC,EAAC,kBAAkB,CAAC;QAAC,sBAAsB,CAAC,EAAC,yBAAyB,CAAA;KAAE,CAAC;8CAS1H,MAAM,KAAE,OAAO,CAAC,SAAS,GAAG;QAAE,cAAc,EAAC,kBAAkB,CAAC;QAAC,sBAAsB,EAAC,yBAAyB,CAAA;KAAE,CAAC;8CASrH,MAAM,mBAAkB,MAAM,KAAE,OAAO,CAAC,SAAS,GAAG,yBAAyB,CAAC;CAS9H,CAAA;AAGD,QAAA,MAAM,kBAAkB;0BACC,UAAU;8BAYN,UAAU;;;;kCAYN,MAAM,OAAM,MAAM;+BAWrB,UAAU,EAAE;;;;;;;+BAWZ,UAAU,UAAS,UAAU,EAAE,eAAc,eAAe,EAAE,WAAU,UAAU,EAAE,YAAW,YAAY,EAAE,SAAQ,SAAS,EAAE,WAAU,WAAW,EAAE,KAAE;QAAE,KAAK,EAAC,MAAM,CAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAC,MAAM,CAAC,EAAC,WAAW,CAAC;QAAC,OAAO,CAAC,EAAC,YAAY,CAAC;QAAC,IAAI,CAAC,EAAC,SAAS,CAAA;KAAE;yBAwBzP,MAAM,aAAY,MAAM;CAM/C,CAAA;AAED,QAAA,MAAM,oBAAoB;+BACI,YAAY,KAAE,MAAM;wCAMX,oBAAoB,KAAE,MAAM;uBAO7C,MAAM;2BAMF,MAAM,OAAM,MAAM,UAAS,MAAM;CAG1D,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/SocialComponents/api/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQzR,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,CAAA;AAE/F,QAAA,MAAM,kBAAkB;;sBASA,OAAO,CAAC,WAAW,EAAE,CAAC;0BAQhB,UAAU,KAAE,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;yCAQ5B,MAAM,EAAE;0CAIP,mBAAmB,KAAE,OAAO,CAAC,mBAAmB,CAAC;qCAItD,MAAM,EAAE,KAAE,OAAO,CAAC,UAAU,EAAE,CAAC;uCAS7B,MAAM,KAAE,OAAO,CAAC,iBAAiB,GAAC,SAAS,CAAC;yCAU1C,MAAM,UAAS,MAAM,KAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;sCAQtD,MAAM,EAAE,KAAE,OAAO,CAAC,UAAU,EAAE,CAAC;oCAShC,MAAM,EAAE,KAAE,OAAO,CAAC,YAAY,EAAE,CAAC;oDASlB,MAAM,EAAE,KAAE,OAAO,CAAC,eAAe,EAAE,CAAC;8BAS1D,MAAM,EAAE;wCASE,iBAAiB,KAAE,OAAO,CAAC,iBAAiB,GAAC,SAAS,CAAC;wCAStD,iBAAiB,KAAE,OAAO,CAAC,iBAAiB,GAAC,SAAS,CAAC;iCAS/D,MAAM,KAAE,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;gDAQ1B,MAAM,KAAE,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;kDAS/C,MAAM,KAAE,OAAO,CAAC,SAAS,GAAG;QAAE,cAAc,CAAC,EAAC,kBAAkB,CAAC;QAAC,sBAAsB,CAAC,EAAC,yBAAyB,CAAA;KAAE,CAAC;8CAS1H,MAAM,KAAE,OAAO,CAAC,SAAS,GAAG;QAAE,cAAc,EAAC,kBAAkB,CAAC;QAAC,sBAAsB,EAAC,yBAAyB,CAAA;KAAE,CAAC;8CASrH,MAAM,mBAAkB,MAAM,KAAE,OAAO,CAAC,SAAS,GAAG,yBAAyB,CAAC;CAS9H,CAAA;AAGD,QAAA,MAAM,kBAAkB;0BACC,UAAU;8BAYN,UAAU;;;;kCAYN,MAAM,OAAM,MAAM;+BAWrB,UAAU,EAAE;;;;;;;+BAWZ,UAAU,UAAS,UAAU,EAAE,eAAc,eAAe,EAAE,WAAU,UAAU,EAAE,YAAW,YAAY,EAAE,SAAQ,SAAS,EAAE,WAAU,WAAW,EAAE,KAAE;QAAE,KAAK,EAAC,MAAM,CAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAC,MAAM,CAAC,EAAC,WAAW,CAAC;QAAC,OAAO,CAAC,EAAC,YAAY,CAAC;QAAC,IAAI,CAAC,EAAC,SAAS,CAAA;KAAE;yBAwBzP,MAAM,aAAY,MAAM;CAM/C,CAAA;AAED,QAAA,MAAM,sBAAsB;gCACG,MAAM,WAAU,MAAM,KAAE,YAAY,EAAE;gCAkBtC,MAAM,cAAa,MAAM,YAAW,MAAM,mBAAkB,MAAM;8BAKpE,YAAY,EAAE,QAAO,YAAY,EAAE;CAe/D,CAAA;AAED,QAAA,MAAM,oBAAoB;+BACI,YAAY,KAAE,MAAM;wCAMX,oBAAoB,KAAE,MAAM;uBAO7C,MAAM;2BAMF,MAAM,OAAM,MAAM,UAAS,MAAM;CAG1D,CAAA"}
@@ -6,5 +6,8 @@ import PodcastModule from './PodcastModule';
6
6
  import AudioPlayer from "./AudioPlayer";
7
7
  import { useContacts } from "./Contacts/useContacts";
8
8
  import PostCard from './PostCard';
9
- export { PlayerCard, PlayerList, PlayerProfile, CompanyProfile, PodcastModule, AudioPlayer, useContacts, PostCard };
9
+ import FormattedTextInput from "./FormattedTextInput";
10
+ import { FormattedText } from "./FormattedTextInput/FormattedText";
11
+ import InputBar from "./InputBar";
12
+ export { PlayerCard, PlayerList, FormattedTextInput, InputBar, FormattedText, PlayerProfile, CompanyProfile, PodcastModule, AudioPlayer, useContacts, PostCard };
10
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/SocialComponents/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EACH,UAAU,EACV,UAAU,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACX,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/SocialComponents/index.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,OAAO,EACH,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,aAAa,EACb,WAAW,EACX,WAAW,EACX,QAAQ,EACX,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "be-components",
3
- "version": "5.1.0",
3
+ "version": "5.1.2",
4
4
  "description": "Components for BettorEdge Apps",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useState } from 'react';
2
- import { TouchableOpacity, Image, Modal, Alert, FlatList, Platform } from 'react-native';
2
+ import { TouchableOpacity, Image, Modal, Alert, FlatList, Platform, useWindowDimensions } from 'react-native';
3
3
  import { Icons } from '../../Components';
4
4
  import Colors from '../../constants/colors';
5
5
  import { ProfileApi, ProfileHelpers } from '../api';
@@ -36,7 +36,7 @@ const VouchCard = ({ player, view_mode, walkthrough, insets, code_details, onVou
36
36
  const [ disclaimer_confirmed, setDisclaimerConfirmed ] = useState(false);
37
37
  const [ id_disclaimer_confirmed, setIDDisclaimerConfirmed ] = useState(false);
38
38
  const [ info_visible, setInfoVisible ] = useState(false);
39
-
39
+ const { height } = useWindowDimensions();
40
40
  const { code_request, promo } = code_details;
41
41
  useEffect(() => {
42
42
  getPlayerFromServer()
@@ -107,6 +107,7 @@ const VouchCard = ({ player, view_mode, walkthrough, insets, code_details, onVou
107
107
  const renderSections = (data:{item:string, index:number}) => {
108
108
  switch(data.item){
109
109
  case 'header':
110
+ if(height < 830){ return <></> }
110
111
  return (
111
112
  <View style={{ padding:20 }}>
112
113
  <Text size={30} theme='h1'>Help us identify you</Text>
@@ -0,0 +1,85 @@
1
+ import React from 'react';
2
+ import { Text, View } from "../../Components/Themed";
3
+ import type { TextTagProps } from '../../types';
4
+ import TagRenderer from './components/TagRenderer';
5
+
6
+ type FormattedTextProps = {
7
+ text: string,
8
+ tags:TextTagProps[],
9
+ onSelectTag: (tag:TextTagProps) => void
10
+ }
11
+
12
+
13
+
14
+ export const FormattedText = ({ text, tags, onSelectTag }:FormattedTextProps) => {
15
+ const components = formatText(text, tags, onSelectTag);
16
+ let unique_lines = [ ...new Set(components.map(c => c.line)) ];
17
+
18
+ return (
19
+ <View transparent>
20
+ {unique_lines.map(l => {
21
+ let render_components = components.filter(c => c.line == l)
22
+ return (
23
+ <View transparent type='row' style={{ flexWrap:'wrap' }}>
24
+ {render_components.map(c => c.component)}
25
+ </View>
26
+ )
27
+ })}
28
+ </View>
29
+ )
30
+ }
31
+
32
+ export const splitText = (text:string) => {
33
+ return text.split(' ');
34
+ }
35
+
36
+
37
+
38
+ export const formatText = (text:string, included_tags:TextTagProps[], onSelectTag:(tag:TextTagProps) => void):{ line:number, component:any }[] => {
39
+ let raw_text = text.replace(/\\n/g, " {ln} ")
40
+ let parsed_text:string[] = JSON.parse(raw_text as string).split(' ');
41
+ //First - lets grab the line breaks
42
+ let line_breaks:number[] = []
43
+ parsed_text.map((t,i) => {
44
+ let breaks = t.split('{ln}');
45
+ if(breaks.length > 1){
46
+ line_breaks.push(i);
47
+ }
48
+ })
49
+
50
+ let components:{line:number, component:any}[] = []
51
+ let lines:{ [key:number]: string } = {}
52
+ let tags:{ [key:number]: string[] } = {}
53
+ //Second - Lets generate the lines and grab tags out of the lines
54
+ let curr_line = 0
55
+ parsed_text.map((t,i) => {
56
+ let line_break = line_breaks.find(b => b == i)
57
+ if(line_break){ curr_line += 1; return }
58
+ let curr_string = lines[curr_line] ?? ''
59
+ curr_string += `${t} `
60
+ lines[curr_line] = curr_string
61
+ let tag = t.split('@');
62
+ if(tag.length == 2){
63
+ let curr_tags = tags[curr_line] ?? []
64
+ console.log(t)
65
+ tags[curr_line] = curr_tags.concat(t)
66
+ }
67
+ });
68
+ Object.values(lines).map((l,i) => {
69
+ let split_line = splitText(l);
70
+ split_line.map((sl) => {
71
+ let tag = included_tags.find(t => `${t.indicator}${t.tag}` == sl);
72
+ if(tag){
73
+ return components.push({
74
+ line: i,
75
+ component: <TagRenderer tag={tag} data={tag?.data} onPress={onSelectTag}/>
76
+ })
77
+ }
78
+ return components.push({
79
+ line: i,
80
+ component: <Text theme='description'>{sl} </Text>
81
+ })
82
+ })
83
+ })
84
+ return components
85
+ }
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { Button, Text } from "../../../Components/Themed"
3
+ import type { PublicPlayerProps, TextTagProps } from "../../../types"
4
+ import { Image } from 'react-native';
5
+
6
+ type PlayerTagProps = {
7
+ tag:TextTagProps,
8
+ player?:PublicPlayerProps,
9
+ onPress: (tag:TextTagProps, data?:PublicPlayerProps) => void
10
+ }
11
+
12
+ const PlayerTag = ({ tag, player, onPress }:PlayerTagProps) => {
13
+
14
+ if(!player){
15
+ return (
16
+ <Button transparent style={{ padding:0 }} onPress={() => onPress(tag, player)}>
17
+ <Text theme='action'>{tag.tag} </Text>
18
+ </Button>
19
+ )
20
+ }
21
+ return (
22
+ <Button float style={{ flexDirection:'row', alignItems:'center', padding:5, borderRadius:100, margin:5, marginLeft:0 }} onPress={() => onPress(tag, player)}>
23
+ <Image
24
+ source={{ uri: player.profile_pic }}
25
+ style={{ height:20, width:20, borderRadius:100 }}
26
+ resizeMode='cover'
27
+ />
28
+ <Text style={{ marginLeft:5 }} theme='description'>{player.username}</Text>
29
+ </Button>
30
+ )
31
+ }
32
+
33
+ export default PlayerTag
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import { Text } from "../../../Components/Themed";
3
+ import type { PublicPlayerProps, TextTagProps } from '../../../types';
4
+ import PlayerTag from './PlayerTag';
5
+
6
+ type TagRendererProps = {
7
+ tag:TextTagProps,
8
+ data?:PublicPlayerProps,
9
+ onPress: (tag:TextTagProps, data?:PublicPlayerProps) => void
10
+ }
11
+ const TagRenderer = ({ tag, data, onPress }:TagRendererProps) => {
12
+
13
+ switch(tag.type){
14
+ case 'player':
15
+ return (
16
+ <PlayerTag tag={tag} player={data} onPress={onPress} />
17
+ )
18
+ default:
19
+ return (
20
+ <Text theme='description'>{tag.tag}</Text>
21
+ )
22
+ }
23
+
24
+ }
25
+
26
+ export default TagRenderer
@@ -0,0 +1,106 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Button, Text, View } from "../../../Components/Themed";
3
+ import type { PublicPlayerProps, TextTagProps } from '../../../types';
4
+ import { SocialComponentApi } from '../../api';
5
+ import { FlatList, Image } from 'react-native';
6
+
7
+ type TagSelectorProps = {
8
+ type: 'player',
9
+ visible:boolean,
10
+ working_tag:TextTagProps,
11
+ onCancel: () => void,
12
+ onSelectTag:(tag:TextTagProps) => void
13
+ }
14
+
15
+ const TagSelector = ({ type, visible, working_tag, onSelectTag, onCancel } : TagSelectorProps) => {
16
+ const [ player_tag, setPlayerTag ] = useState<{
17
+ loading:boolean,
18
+ players:PublicPlayerProps[],
19
+ offset:number
20
+ }>({
21
+ loading: false, players:[], offset:0
22
+ });
23
+
24
+
25
+ useEffect(() => {
26
+ if(!visible){ return }
27
+ startUpSelector(type, working_tag)
28
+ },[visible, working_tag]);
29
+
30
+ const startUpSelector = async(type:'player', working_tag:TextTagProps) => {
31
+ switch(type){
32
+ case 'player':
33
+ return searchPlayers(working_tag, 0);
34
+ default: return //Not handled
35
+ }
36
+ }
37
+
38
+ const searchPlayers = async(tag:TextTagProps, page:number) => {
39
+ setPlayerTag({ ...player_tag, loading: true });
40
+ const plys = await SocialComponentApi.searchPlayersByValue(tag.tag, page);
41
+ setPlayerTag({
42
+ ...player_tag,
43
+ loading: false,
44
+ players: plys,
45
+ offset: page
46
+ })
47
+ }
48
+
49
+ const handleSelectPlayer = (player:PublicPlayerProps) => {
50
+ if(!working_tag){ return }
51
+ onSelectTag({
52
+ ...working_tag,
53
+ tag: player.username,
54
+ data: player,
55
+ tag_type_id: player.player_id,
56
+ valid: true
57
+ })
58
+ }
59
+
60
+ const renderPlayers = (data:{ item:PublicPlayerProps, index:number }) => {
61
+ return (
62
+ <Button float style={{ margin:4, padding:0, maxWidth:120 }} onPress={() => handleSelectPlayer(data.item)}>
63
+ <Image
64
+ source={{ uri: data.item.profile_pic }}
65
+ style={{ height:80, width:120, borderTopRightRadius:8, borderTopLeftRadius:8 }}
66
+ resizeMode='cover'
67
+ />
68
+ <View transparent style={{ padding:5 }}>
69
+ <Text theme='h2' textAlign='center'>@{data.item.username}</Text>
70
+ </View>
71
+ </Button>
72
+ )
73
+ }
74
+
75
+ if(!visible){ return <></> }
76
+
77
+ return (
78
+ <View style={{ position:'absolute', bottom:5, left:0, right:0 }}>
79
+ {type == 'player' ?
80
+ <View float>
81
+ <View type='header' style={{ flexDirection:'row', alignItems:'center', padding:10 }}>
82
+ <View transparent style={{ flex:1 }}>
83
+ <Text theme='h2'>Tag A Player!</Text>
84
+ </View>
85
+ <Button
86
+ title='X'
87
+ float
88
+ onPress={() => onCancel()}
89
+ />
90
+ </View>
91
+ <View style={{ padding:5 }}>
92
+ <FlatList
93
+ data={player_tag.players}
94
+ key={'player_selector_list_format'}
95
+ horizontal
96
+ keyExtractor={(item) => item.player_id.toString()}
97
+ renderItem={renderPlayers}
98
+ />
99
+ </View>
100
+ </View>
101
+ :<></>}
102
+ </View>
103
+ )
104
+ }
105
+
106
+ export default TagSelector
@@ -0,0 +1,160 @@
1
+ import React, { useEffect, useMemo, useState } from 'react';
2
+ import { Button, TextInput, View } from "../../Components/Themed"
3
+ import { Platform, type NativeSyntheticEvent, type TextInputSelectionChangeEventData } from 'react-native';
4
+ import type { TextTagProps } from '../../types';
5
+ import { SocialComponentApi, SocialComponentHelpers } from '../api';
6
+ import TagSelector from './components/TagSelector';
7
+
8
+ type FormattedTextInputProps = {
9
+ onChangeText?: (data:{ text:string, formatted_text:any }) => void,
10
+ submit_title?:string,
11
+ init_data?: { formatted_text: string, text:string, tags:TextTagProps[] },
12
+ onSubmit:(data:{ text:string, formatted_text:any }, tags:TextTagProps[]) => void
13
+ }
14
+
15
+ const FormattedTextInput = ({ submit_title, init_data, onChangeText, onSubmit }:FormattedTextInputProps) => {
16
+ const [ input_state, setInputState ] = useState<{
17
+ height:number
18
+ }>({
19
+ height: 50
20
+ });
21
+ const [ data, setData ] = useState<{
22
+ text: string,
23
+ formatted_text:string
24
+ }>(
25
+ {
26
+ text: '',
27
+ formatted_text: JSON.stringify('')
28
+ }
29
+ );
30
+ const [ location, setLocation ] = useState({
31
+ start:0,
32
+ end:0
33
+ });
34
+ const [ tag_selector, setTagSelector ] = useState<{
35
+ visible:boolean,
36
+ type:'player',
37
+ working_tag?:TextTagProps
38
+ }>({ visible: false, type: 'player' })
39
+ const [ valid_tags, setValidTags ] = useState<TextTagProps[]>([]);
40
+
41
+
42
+ const { text, formatted_text } = data;
43
+ const { height } = input_state;
44
+ const tags = useMemo(() => SocialComponentHelpers.extractTagsFromText(text, location.start), [location.start])
45
+ const active_tag = tags.find(t => t.active);
46
+
47
+ const [ action_loading, setActionLoading ] = useState(false);
48
+ const [ working_tag, setWorkingTag ] = useState<TextTagProps | undefined>();
49
+
50
+ useEffect(() => {
51
+ SocialComponentApi.setEnvironment();
52
+ if(init_data){
53
+ setData({ text: init_data.text, formatted_text: init_data.formatted_text });
54
+ setValidTags(init_data.tags)
55
+ }
56
+ },[init_data])
57
+
58
+ useEffect(() => {
59
+ if(active_tag){ return setWorkingTag(active_tag) }
60
+ if(working_tag){
61
+ console.log('Working a tag no!')
62
+ //validateTag(working_tag)
63
+ searchPlayer(working_tag);
64
+ setWorkingTag(undefined)
65
+ return
66
+ }
67
+ },[active_tag]);
68
+
69
+ const validateTag = async(tag:TextTagProps) => {
70
+ let new_tags = valid_tags.filter(t => t.local_id != tag.local_id).concat(tag);
71
+ setValidTags(new_tags);
72
+ }
73
+
74
+ const searchPlayer = async(tag:TextTagProps) => {
75
+ setActionLoading(true);
76
+ const player = await SocialComponentApi.searchPlayerByUsername(tag.tag);
77
+ if(player){
78
+ validateTag({ ...tag, local_id: (Math.random()*10000).toFixed(), data: player, tag_type_id:player.player_id });
79
+ return setActionLoading(false);
80
+ }
81
+ setTagSelector({
82
+ visible:true,
83
+ working_tag:tag,
84
+ type:'player'
85
+ });
86
+ return setActionLoading(false);
87
+ }
88
+
89
+ const handleSelectionChange = (ev:NativeSyntheticEvent<TextInputSelectionChangeEventData | any>) => {
90
+ if(ev.nativeEvent.selection.start == location.start){ return }
91
+ setLocation({
92
+ start: ev.nativeEvent.selection.start,
93
+ end: ev.nativeEvent.selection.end
94
+ });
95
+ }
96
+
97
+ const handleUpdateTag = async(tag:TextTagProps) => {
98
+ const new_text = SocialComponentHelpers.replaceText(text, tag.start, tag.end, `@${tag.tag}`);
99
+ setValidTags(valid_tags.concat({ ...tag }));
100
+ setData({
101
+ ...data,
102
+ text: new_text
103
+ });
104
+ setTagSelector({ visible: false, type: 'player' })
105
+ }
106
+
107
+ const handleSubmit = () => {
108
+ if(!text){ return }
109
+ let new_tags = SocialComponentHelpers.compareTags(valid_tags, tags);
110
+ onSubmit({ text, formatted_text }, new_tags)
111
+ }
112
+
113
+ const handleChange = (ev:any) => {
114
+ let text:string = JSON.stringify(ev.text)
115
+ setData({
116
+ ...data,
117
+ text: ev.text,
118
+ formatted_text:text
119
+ });
120
+ if(onChangeText){ onChangeText({ text: ev.text, formatted_text: text }) }
121
+ }
122
+
123
+ return (
124
+ <View transparent>
125
+ <View transparent>
126
+ {tag_selector.visible && tag_selector.working_tag ?
127
+ <TagSelector
128
+ working_tag={tag_selector.working_tag}
129
+ type={tag_selector.type}
130
+ visible={tag_selector.visible}
131
+ onCancel={() => setTagSelector({ visible: false, type: 'player' })}
132
+ onSelectTag={(tag) => handleUpdateTag(tag)}
133
+ />
134
+ :<></>}
135
+ </View>
136
+ <View transparent style={{ flexDirection:'row', alignItems:'flex-end' }}>
137
+ <TextInput
138
+ value={text}
139
+ editable={!action_loading}
140
+ multiline
141
+ style={{ flex:1, height: Platform.OS == 'web' ? height : undefined }}
142
+ onContentSizeChange={(e) => {
143
+ if(Platform.OS != 'web'){ return }
144
+ setInputState({ ...input_state, height: e.nativeEvent.contentSize.height })
145
+ }}
146
+ onSelectionChange={handleSelectionChange}
147
+ onChange={(ev) => handleChange(ev.nativeEvent)}
148
+ />
149
+ <Button
150
+ title={submit_title ?? 'Submit'}
151
+ type='success'
152
+ style={{ opacity:text ? 1: 0.5, marginLeft:5 }}
153
+ onPress={() => handleSubmit()}
154
+ />
155
+ </View>
156
+ </View>
157
+ )
158
+ }
159
+
160
+ export default FormattedTextInput
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { View } from "../../Components/Themed"
3
+ import { FlatList } from 'react-native';
4
+ import { Icons } from '../../Components';
5
+ import { useColors } from '../../constants/useColors';
6
+ import ImageUploader from '../../Components/ImageUploader';
7
+
8
+ type InputBarProps = {
9
+ actions: string[],
10
+ onImageUpload: (image: { url:string, [key:string]:any }) => void
11
+ }
12
+
13
+ const InputBar = ({ actions, onImageUpload } : InputBarProps) => {
14
+ const Colors = useColors();
15
+
16
+ const renderActions = (data:{ item:string, index:number }) => {
17
+ switch(data.item){
18
+ case 'image':
19
+ return (
20
+ <ImageUploader
21
+ public_id={(Math.random()*100000).toFixed()}
22
+ onFinishUpload={(obj) => onImageUpload({ ...obj, url: obj.secure_url })}
23
+ >
24
+ <Icons.ImageIcon size={14} color={Colors.text.h1} />
25
+ </ImageUploader>
26
+ )
27
+ default: return <></>
28
+ }
29
+ }
30
+
31
+ return (
32
+ <View transparent style={{ flexDirection:'row', alignItems:'center' }}>
33
+ <FlatList
34
+ key={'action_list'}
35
+ data={actions}
36
+ keyExtractor={(item) => item}
37
+ renderItem={renderActions}
38
+ />
39
+ </View>
40
+ )
41
+ }
42
+
43
+ export default InputBar
@@ -130,7 +130,7 @@ const PostCard = ({ player_id, post, player, orders, onRequestAuthenticate, onCo
130
130
  onSelectPlayer={onSelectPlayer}
131
131
  />
132
132
  :<></>}
133
- <View transparent style={{ padding:10 }}>
133
+ <View transparent style={{ padding:10 }}>
134
134
  <Text theme='h2'>{post.title}</Text>
135
135
  </View>
136
136
  <View transparent style={{ padding:10, paddingTop:0, paddingBottom:0 }}>