nitro-v36-with-renderer-v36
/
src /
hooks /
rooms /
widgets /
furniture /
useFurnitureStickieWidget.ts
useFurnitureStickieWidget.ts 2.6 Ko
Télécharger le fichier
import { GetRoomEngine, GetSessionDataManager, RoomEngineTriggerWidgetEvent, RoomObjectVariable } from '@octane/renderer';
import { useState } from 'react';
import { GetRoomSession, IsAnyRoomController, IsOwnerOfFurniture } from '../../../../api';
import { useOctaneEvent } from '../../../events';
import { useFurniRemovedEvent } from '../../engine';
const useFurnitureStickieWidgetState = () => {
const [objectId, setObjectId] = useState(-1);
const [category, setCategory] = useState(-1);
const [color, setColor] = useState('0');
const [text, setText] = useState('');
const [type, setType] = useState('');
const [canModify, setCanModify] = useState(false);
const onClose = () => {
setObjectId(-1);
setCategory(-1);
setColor('0');
setText('');
setType('');
setCanModify(false);
};
const updateColor = (newColor: string) => {
if (newColor === color) return;
setColor(newColor);
GetRoomEngine().modifyRoomObjectData(objectId, category, newColor, text);
};
const updateText = (newText: string) => {
setText(newText);
GetRoomEngine().modifyRoomObjectData(objectId, category, color, newText);
};
const trash = () => GetRoomEngine().deleteRoomObject(objectId, category);
useOctaneEvent<RoomEngineTriggerWidgetEvent>(RoomEngineTriggerWidgetEvent.REQUEST_STICKIE, (event) => {
const roomObject = GetRoomEngine().getRoomObject(event.roomId, event.objectId, event.category);
if (!roomObject) return;
const data = roomObject.model.getValue<string>(RoomObjectVariable.FURNITURE_ITEMDATA);
if (data.length < 6) return;
let color: string = null;
let text: string = null;
if (data.indexOf(' ') > 0) {
color = data.slice(0, data.indexOf(' '));
text = data.slice(data.indexOf(' ') + 1, data.length);
} else {
color = data;
}
setObjectId(event.objectId);
setCategory(event.category);
setColor(color || '0');
setText(text || '');
setType(roomObject.type || 'post_it');
setCanModify(GetRoomSession().isRoomOwner || IsAnyRoomController() || IsOwnerOfFurniture(roomObject));
});
useFurniRemovedEvent(objectId !== -1 && category !== -1, (event) => {
if (event.id !== objectId || event.category !== category) return;
onClose();
});
return { objectId, color, text, type, canModify, updateColor, updateText, trash, onClose };
};
export const useFurnitureStickieWidget = useFurnitureStickieWidgetState;
