@streamplace/components 0.7.29 → 0.7.30

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.
@@ -25,6 +25,7 @@ exports.ModView = (0, react_1.forwardRef)(() => {
25
25
  const setReportModalOpen = (0, player_store_1.usePlayerStore)((x) => x.setReportModalOpen);
26
26
  const setReportSubject = (0, player_store_1.usePlayerStore)((x) => x.setReportSubject);
27
27
  const setModMessage = (0, player_store_1.usePlayerStore)((x) => x.setModMessage);
28
+ const deleteChatMessage = (0, livestream_store_1.useDeleteChatMessage)();
28
29
  // get the channel did
29
30
  const channelId = (0, player_store_1.usePlayerStore)((state) => state.src);
30
31
  // get the logged in user's identity
@@ -77,23 +78,37 @@ exports.ModView = (0, react_1.forwardRef)(() => {
77
78
  ? "Blocking..."
78
79
  : `Block user @${message.author.handle} from this channel` })) })] })), (0, jsx_runtime_1.jsxs)(ui_1.DropdownMenuGroup, { title: `User actions`, children: [(0, jsx_runtime_1.jsx)(ui_1.DropdownMenuItem, { onPress: () => {
79
80
  react_native_1.Linking.openURL(`https://${BSKY_FRONTEND_DOMAIN}/profile/${message.author.handle}`);
80
- }, children: (0, jsx_runtime_1.jsxs)(ui_1.Text, { color: "primary", children: ["View user on ", BSKY_FRONTEND_DOMAIN] }) }), message.author.did === agent?.did && ((0, jsx_runtime_1.jsx)(DeleteButton, { message: message })), message.author.did !== agent?.did && ((0, jsx_runtime_1.jsx)(ReportButton, { message: message, setReportModalOpen: setReportModalOpen, setReportSubject: setReportSubject }))] })] })) })] }));
81
+ }, children: (0, jsx_runtime_1.jsxs)(ui_1.Text, { color: "primary", children: ["View user on ", BSKY_FRONTEND_DOMAIN] }) }), message.author.did === agent?.did && ((0, jsx_runtime_1.jsx)(DeleteButton, { message: message, deleteChatMessage: deleteChatMessage })), message.author.did !== agent?.did && ((0, jsx_runtime_1.jsx)(ReportButton, { message: message, setReportModalOpen: setReportModalOpen, setReportSubject: setReportSubject }))] })] })) })] }));
81
82
  });
82
- function DeleteButton({ message, }) {
83
- const deleteChatMessage = (0, livestream_store_1.useDeleteChatMessage)();
84
- const [confirming, setConfirming] = (0, react_1.useState)(false);
83
+ var DeleteState;
84
+ (function (DeleteState) {
85
+ DeleteState[DeleteState["None"] = 0] = "None";
86
+ DeleteState[DeleteState["Confirmed"] = 1] = "Confirmed";
87
+ DeleteState[DeleteState["Deleting"] = 2] = "Deleting";
88
+ })(DeleteState || (DeleteState = {}));
89
+ function DeleteButton({ message, deleteChatMessage, }) {
90
+ const [confirming, setConfirming] = (0, react_1.useState)(DeleteState.None);
85
91
  const { onOpenChange } = (0, dropdown_menu_1.useRootContext)();
86
92
  return ((0, jsx_runtime_1.jsx)(ui_1.DropdownMenuItem, { onPress: () => {
87
93
  if (!message)
88
94
  return;
89
95
  if (!confirming) {
90
- setConfirming(true);
96
+ setConfirming(DeleteState.Confirmed);
91
97
  return;
92
98
  }
99
+ if (confirming === DeleteState.Confirmed) {
100
+ setConfirming(DeleteState.Deleting);
101
+ }
93
102
  deleteChatMessage(message.uri).then(() => {
103
+ // wait ~a second before resetting state to allow deletion to take effect
104
+ setTimeout(() => setConfirming(DeleteState.None), 1000);
94
105
  onOpenChange?.(false);
95
106
  });
96
- }, children: (0, jsx_runtime_1.jsx)(ui_1.Text, { color: "destructive", children: confirming ? "Are you sure?" : "Delete message" }) }));
107
+ }, children: (0, jsx_runtime_1.jsx)(ui_1.Text, { color: "destructive", children: confirming === DeleteState.Confirmed
108
+ ? "Are you sure? Click again to confirm."
109
+ : confirming === DeleteState.Deleting
110
+ ? "Deleting..."
111
+ : "Delete message" }) }));
97
112
  }
98
113
  function ReportButton({ message, setReportModalOpen, setReportSubject, }) {
99
114
  const { onOpenChange } = (0, dropdown_menu_1.useRootContext)();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@streamplace/components",
3
- "version": "0.7.29",
3
+ "version": "0.7.30",
4
4
  "description": "Streamplace React (Native) Components",
5
5
  "main": "dist/index.js",
6
6
  "types": "src/index.tsx",
@@ -54,5 +54,5 @@
54
54
  "start": "tsc --watch --preserveWatchOutput",
55
55
  "prepare": "tsc"
56
56
  },
57
- "gitHead": "8dba54b751a4a48f125485ef8b0997428f6095cf"
57
+ "gitHead": "c8a2e2822dcdc429221beb918925866e9de7b838"
58
58
  }
@@ -49,6 +49,7 @@ export const ModView = forwardRef<ModViewRef, ModViewProps>(() => {
49
49
  const setReportModalOpen = usePlayerStore((x) => x.setReportModalOpen);
50
50
  const setReportSubject = usePlayerStore((x) => x.setReportSubject);
51
51
  const setModMessage = usePlayerStore((x) => x.setModMessage);
52
+ const deleteChatMessage = useDeleteChatMessage();
52
53
 
53
54
  // get the channel did
54
55
  const channelId = usePlayerStore((state) => state.src);
@@ -174,7 +175,10 @@ export const ModView = forwardRef<ModViewRef, ModViewProps>(() => {
174
175
  <Text color="primary">View user on {BSKY_FRONTEND_DOMAIN}</Text>
175
176
  </DropdownMenuItem>
176
177
  {message.author.did === agent?.did && (
177
- <DeleteButton message={message} />
178
+ <DeleteButton
179
+ message={message}
180
+ deleteChatMessage={deleteChatMessage}
181
+ />
178
182
  )}
179
183
  {message.author.did !== agent?.did && (
180
184
  <ReportButton
@@ -191,29 +195,45 @@ export const ModView = forwardRef<ModViewRef, ModViewProps>(() => {
191
195
  );
192
196
  });
193
197
 
198
+ enum DeleteState {
199
+ None,
200
+ Confirmed,
201
+ Deleting,
202
+ }
203
+
194
204
  export function DeleteButton({
195
205
  message,
206
+ deleteChatMessage,
196
207
  }: {
197
208
  message: ChatMessageViewHydrated;
209
+ deleteChatMessage: (uri: string) => Promise<any>;
198
210
  }) {
199
- const deleteChatMessage = useDeleteChatMessage();
200
- const [confirming, setConfirming] = useState(false);
211
+ const [confirming, setConfirming] = useState<DeleteState>(DeleteState.None);
201
212
  const { onOpenChange } = useRootContext();
202
213
  return (
203
214
  <DropdownMenuItem
204
215
  onPress={() => {
205
216
  if (!message) return;
206
217
  if (!confirming) {
207
- setConfirming(true);
218
+ setConfirming(DeleteState.Confirmed);
208
219
  return;
209
220
  }
221
+ if (confirming === DeleteState.Confirmed) {
222
+ setConfirming(DeleteState.Deleting);
223
+ }
210
224
  deleteChatMessage(message.uri).then(() => {
225
+ // wait ~a second before resetting state to allow deletion to take effect
226
+ setTimeout(() => setConfirming(DeleteState.None), 1000);
211
227
  onOpenChange?.(false);
212
228
  });
213
229
  }}
214
230
  >
215
231
  <Text color="destructive">
216
- {confirming ? "Are you sure?" : "Delete message"}
232
+ {confirming === DeleteState.Confirmed
233
+ ? "Are you sure? Click again to confirm."
234
+ : confirming === DeleteState.Deleting
235
+ ? "Deleting..."
236
+ : "Delete message"}
217
237
  </Text>
218
238
  </DropdownMenuItem>
219
239
  );