mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 07:26:19 +00:00
Merge upstream/main into feature/checkpoint-20260403
This commit is contained in:
@@ -60,7 +60,7 @@ export const useFurniEditor = () =>
|
||||
const [ catalogItems, setCatalogItems ] = useState<CatalogRef[]>([]);
|
||||
const [ interactions, setInteractions ] = useState<string[]>([]);
|
||||
const [ furniDataEntry, setFurniDataEntry ] = useState<Record<string, unknown> | null>(null);
|
||||
const pendingActionRef = useRef<string | null>(null);
|
||||
const pendingActionRef = useRef<{ action: string; itemId: number } | null>(null);
|
||||
const { simpleAlert = null } = useNotification();
|
||||
|
||||
const clearError = useCallback(() => setError(null), []);
|
||||
@@ -161,7 +161,9 @@ export const useFurniEditor = () =>
|
||||
useMessageEvent(FurniEditorResultEvent, (event: FurniEditorResultEvent) =>
|
||||
{
|
||||
const parser = event.getParser();
|
||||
const action = pendingActionRef.current;
|
||||
const pending = pendingActionRef.current;
|
||||
const action = pending?.action ?? null;
|
||||
const actionItemId = pending?.itemId ?? null;
|
||||
|
||||
pendingActionRef.current = null;
|
||||
setLoading(false);
|
||||
@@ -182,10 +184,10 @@ export const useFurniEditor = () =>
|
||||
|
||||
if(action === 'update')
|
||||
{
|
||||
// Auto-reload detail after update
|
||||
if(selectedItem)
|
||||
// Auto-reload detail after update using the ID from the original request
|
||||
if(actionItemId)
|
||||
{
|
||||
SendMessageComposer(new FurniEditorDetailComposer(selectedItem.id));
|
||||
SendMessageComposer(new FurniEditorDetailComposer(actionItemId));
|
||||
}
|
||||
|
||||
if(simpleAlert)
|
||||
@@ -231,7 +233,7 @@ export const useFurniEditor = () =>
|
||||
{
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
pendingActionRef.current = 'update';
|
||||
pendingActionRef.current = { action: 'update', itemId: id };
|
||||
SendMessageComposer(new FurniEditorUpdateComposer(id, JSON.stringify(fields)));
|
||||
}, []);
|
||||
|
||||
@@ -239,7 +241,7 @@ export const useFurniEditor = () =>
|
||||
{
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
pendingActionRef.current = 'delete';
|
||||
pendingActionRef.current = { action: 'delete', itemId: id };
|
||||
SendMessageComposer(new FurniEditorDeleteComposer(id));
|
||||
}, []);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ControlYoutubeDisplayPlaybackMessageComposer, GetRoomEngine, GetSessionDataManager, GetYoutubeDisplayStatusMessageComposer, RoomEngineTriggerWidgetEvent, RoomId, SecurityLevel, SetYoutubeDisplayPlaylistMessageComposer, YoutubeControlVideoMessageEvent, YoutubeDisplayPlaylist, YoutubeDisplayPlaylistsEvent, YoutubeDisplayVideoMessageEvent } from '@nitrots/nitro-renderer';
|
||||
import { useState } from 'react';
|
||||
import { useRef, useState } from 'react';
|
||||
import { IsOwnerOfFurniture, SendMessageComposer, YoutubeVideoPlaybackStateEnum } from '../../../../api';
|
||||
import { useMessageEvent, useNitroEvent } from '../../../events';
|
||||
import { useFurniRemovedEvent } from '../../engine';
|
||||
@@ -13,6 +13,7 @@ const useFurnitureYoutubeWidgetState = () =>
|
||||
{
|
||||
const [ objectId, setObjectId ] = useState(-1);
|
||||
const [ category, setCategory ] = useState(-1);
|
||||
const objectIdRef = useRef(-1);
|
||||
const [ videoId, setVideoId ] = useState<string>(null);
|
||||
const [ videoStart, setVideoStart ] = useState<number>(null);
|
||||
const [ videoEnd, setVideoEnd ] = useState<number>(null);
|
||||
@@ -23,6 +24,7 @@ const useFurnitureYoutubeWidgetState = () =>
|
||||
|
||||
const onClose = () =>
|
||||
{
|
||||
objectIdRef.current = -1;
|
||||
setObjectId(-1);
|
||||
setCategory(-1);
|
||||
setVideoId(null);
|
||||
@@ -64,6 +66,7 @@ const useFurnitureYoutubeWidgetState = () =>
|
||||
|
||||
if(!roomObject) return;
|
||||
|
||||
objectIdRef.current = event.objectId;
|
||||
setObjectId(event.objectId);
|
||||
setCategory(event.category);
|
||||
setHasControl(GetSessionDataManager().hasSecurity(SecurityLevel.EMPLOYEE) || IsOwnerOfFurniture(roomObject));
|
||||
@@ -74,8 +77,9 @@ const useFurnitureYoutubeWidgetState = () =>
|
||||
useMessageEvent<YoutubeDisplayVideoMessageEvent>(YoutubeDisplayVideoMessageEvent, event =>
|
||||
{
|
||||
const parser = event.getParser();
|
||||
const currentObjectId = objectIdRef.current;
|
||||
|
||||
if((objectId === -1) || (objectId !== parser.furniId)) return;
|
||||
if((currentObjectId === -1) || (currentObjectId !== parser.furniId)) return;
|
||||
|
||||
setVideoId(parser.videoId);
|
||||
setVideoStart(parser.startAtSeconds);
|
||||
@@ -86,8 +90,9 @@ const useFurnitureYoutubeWidgetState = () =>
|
||||
useMessageEvent<YoutubeDisplayPlaylistsEvent>(YoutubeDisplayPlaylistsEvent, event =>
|
||||
{
|
||||
const parser = event.getParser();
|
||||
const currentObjectId = objectIdRef.current;
|
||||
|
||||
if((objectId === -1) || (objectId !== parser.furniId)) return;
|
||||
if((currentObjectId === -1) || (currentObjectId !== parser.furniId)) return;
|
||||
|
||||
setPlaylists(parser.playlists);
|
||||
setSelectedVideo(parser.selectedPlaylistId);
|
||||
@@ -100,8 +105,9 @@ const useFurnitureYoutubeWidgetState = () =>
|
||||
useMessageEvent<YoutubeControlVideoMessageEvent>(YoutubeControlVideoMessageEvent, event =>
|
||||
{
|
||||
const parser = event.getParser();
|
||||
const currentObjectId = objectIdRef.current;
|
||||
|
||||
if((objectId === -1) || (objectId !== parser.furniId)) return;
|
||||
if((currentObjectId === -1) || (currentObjectId !== parser.furniId)) return;
|
||||
|
||||
switch(parser.commandId)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user