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.
- package/lib/commonjs/ProfileManager/Components/VouchCard.js +6 -0
- package/lib/commonjs/ProfileManager/Components/VouchCard.js.map +1 -1
- package/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.js +93 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.js.map +1 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.js +56 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.js.map +1 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.js +30 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.js.map +1 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.js +138 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.js.map +1 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/index.js +189 -0
- package/lib/commonjs/SocialComponents/FormattedTextInput/index.js.map +1 -0
- package/lib/commonjs/SocialComponents/InputBar/index.js +50 -0
- package/lib/commonjs/SocialComponents/InputBar/index.js.map +1 -0
- package/lib/commonjs/SocialComponents/PostCard/index.js.map +1 -1
- package/lib/commonjs/SocialComponents/api/index.js +82 -4
- package/lib/commonjs/SocialComponents/api/index.js.map +1 -1
- package/lib/commonjs/SocialComponents/index.js +21 -0
- package/lib/commonjs/SocialComponents/index.js.map +1 -1
- package/lib/module/ProfileManager/Components/VouchCard.js +7 -1
- package/lib/module/ProfileManager/Components/VouchCard.js.map +1 -1
- package/lib/module/SocialComponents/FormattedTextInput/FormattedText.js +83 -0
- package/lib/module/SocialComponents/FormattedTextInput/FormattedText.js.map +1 -0
- package/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.js +49 -0
- package/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.js.map +1 -0
- package/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.js +23 -0
- package/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.js.map +1 -0
- package/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.js +130 -0
- package/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.js.map +1 -0
- package/lib/module/SocialComponents/FormattedTextInput/index.js +180 -0
- package/lib/module/SocialComponents/FormattedTextInput/index.js.map +1 -0
- package/lib/module/SocialComponents/InputBar/index.js +43 -0
- package/lib/module/SocialComponents/InputBar/index.js.map +1 -0
- package/lib/module/SocialComponents/PostCard/index.js.map +1 -1
- package/lib/module/SocialComponents/api/index.js +82 -3
- package/lib/module/SocialComponents/api/index.js.map +1 -1
- package/lib/module/SocialComponents/index.js +4 -1
- package/lib/module/SocialComponents/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/ProfileManager/Components/VouchCard.d.ts.map +1 -1
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.d.ts +9 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/FormattedText.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts +8 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts +8 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.d.ts +10 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/index.d.ts +9 -0
- package/lib/typescript/lib/commonjs/SocialComponents/FormattedTextInput/index.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/SocialComponents/InputBar/index.d.ts +7 -0
- package/lib/typescript/lib/commonjs/SocialComponents/InputBar/index.d.ts.map +1 -0
- package/lib/typescript/lib/commonjs/SocialComponents/api/index.d.ts +7 -0
- package/lib/typescript/lib/commonjs/SocialComponents/api/index.d.ts.map +1 -1
- package/lib/typescript/lib/commonjs/SocialComponents/index.d.ts +7 -0
- package/lib/typescript/lib/module/Components/Spring.d.ts +1 -1
- package/lib/typescript/lib/module/ProfileManager/Components/VouchCard.d.ts.map +1 -1
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/FormattedText.d.ts +9 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/FormattedText.d.ts.map +1 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts +8 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts.map +1 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts +12 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts.map +1 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.d.ts +12 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map +1 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/index.d.ts +9 -0
- package/lib/typescript/lib/module/SocialComponents/FormattedTextInput/index.d.ts.map +1 -0
- package/lib/typescript/lib/module/SocialComponents/InputBar/index.d.ts +7 -0
- package/lib/typescript/lib/module/SocialComponents/InputBar/index.d.ts.map +1 -0
- package/lib/typescript/lib/module/SocialComponents/api/index.d.ts +7 -0
- package/lib/typescript/lib/module/SocialComponents/api/index.d.ts.map +1 -1
- package/lib/typescript/lib/module/SocialComponents/index.d.ts +4 -1
- package/lib/typescript/lib/module/SocialComponents/index.d.ts.map +1 -1
- package/lib/typescript/src/ProfileManager/Components/VouchCard.d.ts.map +1 -1
- package/lib/typescript/src/SocialComponents/FormattedTextInput/FormattedText.d.ts +15 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/FormattedText.d.ts.map +1 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts +10 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/components/PlayerTag.d.ts.map +1 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts +10 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagRenderer.d.ts.map +1 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagSelector.d.ts +12 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map +1 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/index.d.ts +21 -0
- package/lib/typescript/src/SocialComponents/FormattedTextInput/index.d.ts.map +1 -0
- package/lib/typescript/src/SocialComponents/InputBar/index.d.ts +11 -0
- package/lib/typescript/src/SocialComponents/InputBar/index.d.ts.map +1 -0
- package/lib/typescript/src/SocialComponents/api/index.d.ts +9 -2
- package/lib/typescript/src/SocialComponents/api/index.d.ts.map +1 -1
- package/lib/typescript/src/SocialComponents/index.d.ts +4 -1
- package/lib/typescript/src/SocialComponents/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ProfileManager/Components/VouchCard.tsx +3 -2
- package/src/SocialComponents/FormattedTextInput/FormattedText.tsx +85 -0
- package/src/SocialComponents/FormattedTextInput/components/PlayerTag.tsx +33 -0
- package/src/SocialComponents/FormattedTextInput/components/TagRenderer.tsx +26 -0
- package/src/SocialComponents/FormattedTextInput/components/TagSelector.tsx +106 -0
- package/src/SocialComponents/FormattedTextInput/index.tsx +160 -0
- package/src/SocialComponents/InputBar/index.tsx +43 -0
- package/src/SocialComponents/PostCard/index.tsx +1 -1
- package/src/SocialComponents/api/index.ts +63 -4
- package/src/SocialComponents/index.tsx +7 -0
- 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
|
package/lib/typescript/src/SocialComponents/FormattedTextInput/components/TagSelector.d.ts.map
ADDED
|
@@ -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;
|
|
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
|
-
|
|
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,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={{
|
|
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 }}>
|