Updated select tool to take edit permissions into account
This commit is contained in:
parent
e044a7cd4b
commit
17defb0aec
@ -151,8 +151,7 @@ function Map({
|
|||||||
onMapNoteCreate,
|
onMapNoteCreate,
|
||||||
onMapNoteChange,
|
onMapNoteChange,
|
||||||
onMapNoteRemove,
|
onMapNoteRemove,
|
||||||
selectedToolId,
|
selectedToolId
|
||||||
!!(map?.owner === userId || mapState?.editFlags.includes("notes"))
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const { selectionTool, selectionMenu, selectionDragOverlay } =
|
const { selectionTool, selectionMenu, selectionDragOverlay } =
|
||||||
|
@ -42,6 +42,8 @@ type MapSelectProps = {
|
|||||||
onSelectionMenuOpen: (open: boolean) => void;
|
onSelectionMenuOpen: (open: boolean) => void;
|
||||||
onSelectionDragStart: () => void;
|
onSelectionDragStart: () => void;
|
||||||
onSelectionDragEnd: () => void;
|
onSelectionDragEnd: () => void;
|
||||||
|
disabledTokens: Record<string, boolean>;
|
||||||
|
disabledNotes: Record<string, boolean>;
|
||||||
};
|
};
|
||||||
|
|
||||||
function SelectTool({
|
function SelectTool({
|
||||||
@ -53,6 +55,8 @@ function SelectTool({
|
|||||||
onSelectionMenuOpen,
|
onSelectionMenuOpen,
|
||||||
onSelectionDragStart,
|
onSelectionDragStart,
|
||||||
onSelectionDragEnd,
|
onSelectionDragEnd,
|
||||||
|
disabledTokens,
|
||||||
|
disabledNotes,
|
||||||
}: MapSelectProps) {
|
}: MapSelectProps) {
|
||||||
const stageScale = useDebouncedStageScale();
|
const stageScale = useDebouncedStageScale();
|
||||||
const mapWidth = useMapWidth();
|
const mapWidth = useMapWidth();
|
||||||
@ -192,7 +196,10 @@ function SelectTool({
|
|||||||
const tokens = tokensGroup.children;
|
const tokens = tokensGroup.children;
|
||||||
if (tokens) {
|
if (tokens) {
|
||||||
for (let token of tokens) {
|
for (let token of tokens) {
|
||||||
if (intersection.intersects(token.position())) {
|
if (
|
||||||
|
!(token.id() in disabledTokens) &&
|
||||||
|
intersection.intersects(token.position())
|
||||||
|
) {
|
||||||
intersectingItems.push({ type: "token", id: token.id() });
|
intersectingItems.push({ type: "token", id: token.id() });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -200,7 +207,10 @@ function SelectTool({
|
|||||||
const notes = notesGroup.children;
|
const notes = notesGroup.children;
|
||||||
if (notes) {
|
if (notes) {
|
||||||
for (let note of notes) {
|
for (let note of notes) {
|
||||||
if (intersection.intersects(note.position())) {
|
if (
|
||||||
|
!(note.id() in disabledNotes) &&
|
||||||
|
intersection.intersects(note.position())
|
||||||
|
) {
|
||||||
intersectingItems.push({ type: "note", id: note.id() });
|
intersectingItems.push({ type: "note", id: note.id() });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import { useState } from "react";
|
|||||||
import NoteDragOverlay from "../components/note/NoteDragOverlay";
|
import NoteDragOverlay from "../components/note/NoteDragOverlay";
|
||||||
import NoteMenu from "../components/note/NoteMenu";
|
import NoteMenu from "../components/note/NoteMenu";
|
||||||
import NoteTool from "../components/tools/NoteTool";
|
import NoteTool from "../components/tools/NoteTool";
|
||||||
|
import { useUserId } from "../contexts/UserIdContext";
|
||||||
import {
|
import {
|
||||||
NoteChangeEventHandler,
|
NoteChangeEventHandler,
|
||||||
NoteCreateEventHander,
|
NoteCreateEventHander,
|
||||||
@ -19,13 +20,18 @@ function useMapNotes(
|
|||||||
onNoteCreate: NoteCreateEventHander,
|
onNoteCreate: NoteCreateEventHander,
|
||||||
onNoteChange: NoteChangeEventHandler,
|
onNoteChange: NoteChangeEventHandler,
|
||||||
onNoteRemove: NoteRemoveEventHander,
|
onNoteRemove: NoteRemoveEventHander,
|
||||||
selectedToolId: MapToolId,
|
selectedToolId: MapToolId
|
||||||
allowNoteEditing: boolean
|
|
||||||
) {
|
) {
|
||||||
|
const userId = useUserId();
|
||||||
|
const allowNoteEditing = !!(
|
||||||
|
map?.owner === userId || mapState?.editFlags.includes("notes")
|
||||||
|
);
|
||||||
|
|
||||||
const [isNoteMenuOpen, setIsNoteMenuOpen] = useState<boolean>(false);
|
const [isNoteMenuOpen, setIsNoteMenuOpen] = useState<boolean>(false);
|
||||||
const [noteMenuOptions, setNoteMenuOptions] = useState<NoteMenuOptions>();
|
const [noteMenuOptions, setNoteMenuOptions] = useState<NoteMenuOptions>();
|
||||||
const [noteDraggingOptions, setNoteDraggingOptions] =
|
const [noteDraggingOptions, setNoteDraggingOptions] =
|
||||||
useState<NoteDraggingOptions>();
|
useState<NoteDraggingOptions>();
|
||||||
|
|
||||||
function handleNoteMenuOpen(noteId: string, noteNode: Konva.Node) {
|
function handleNoteMenuOpen(noteId: string, noteNode: Konva.Node) {
|
||||||
setNoteMenuOptions({ noteId, noteNode });
|
setNoteMenuOptions({ noteId, noteNode });
|
||||||
setIsNoteMenuOpen(true);
|
setIsNoteMenuOpen(true);
|
||||||
|
@ -2,6 +2,7 @@ import { useEffect, useState } from "react";
|
|||||||
import SelectionDragOverlay from "../components/selection/SelectionDragOverlay";
|
import SelectionDragOverlay from "../components/selection/SelectionDragOverlay";
|
||||||
import SelectionMenu from "../components/selection/SelectionMenu";
|
import SelectionMenu from "../components/selection/SelectionMenu";
|
||||||
import SelectTool from "../components/tools/SelectTool";
|
import SelectTool from "../components/tools/SelectTool";
|
||||||
|
import { useUserId } from "../contexts/UserIdContext";
|
||||||
import {
|
import {
|
||||||
SelectionItemsChangeEventHandler,
|
SelectionItemsChangeEventHandler,
|
||||||
SelectionItemsCreateEventHandler,
|
SelectionItemsCreateEventHandler,
|
||||||
@ -21,6 +22,24 @@ function useMapSelection(
|
|||||||
selectedToolId: MapToolId,
|
selectedToolId: MapToolId,
|
||||||
settings: SelectToolSettings
|
settings: SelectToolSettings
|
||||||
) {
|
) {
|
||||||
|
const userId = useUserId();
|
||||||
|
const disabledTokens: Record<string, boolean> = {};
|
||||||
|
const disabledNotes: Record<string, boolean> = {};
|
||||||
|
if (mapState && map && map.owner !== userId) {
|
||||||
|
if (!mapState.editFlags.includes("tokens")) {
|
||||||
|
for (let token of Object.values(mapState.tokens)) {
|
||||||
|
if (token.owner !== userId) {
|
||||||
|
disabledTokens[token.id] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!mapState.editFlags.includes("notes")) {
|
||||||
|
for (let note of Object.values(mapState.notes)) {
|
||||||
|
disabledNotes[note.id] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const [isSelectionMenuOpen, setIsSelectionMenuOpen] =
|
const [isSelectionMenuOpen, setIsSelectionMenuOpen] =
|
||||||
useState<boolean>(false);
|
useState<boolean>(false);
|
||||||
const [isSelectionDragging, setIsSelectionDragging] = useState(false);
|
const [isSelectionDragging, setIsSelectionDragging] = useState(false);
|
||||||
@ -72,6 +91,8 @@ function useMapSelection(
|
|||||||
onSelectionMenuOpen={handleSelectionMenuOpen}
|
onSelectionMenuOpen={handleSelectionMenuOpen}
|
||||||
onSelectionDragStart={handleSelectionDragStart}
|
onSelectionDragStart={handleSelectionDragStart}
|
||||||
onSelectionDragEnd={handleSelectionDragEnd}
|
onSelectionDragEnd={handleSelectionDragEnd}
|
||||||
|
disabledTokens={disabledTokens}
|
||||||
|
disabledNotes={disabledNotes}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -27,27 +27,22 @@ function useMapTokens(
|
|||||||
onTokenStateRemove: TokenStateRemoveHandler,
|
onTokenStateRemove: TokenStateRemoveHandler,
|
||||||
selectedToolId: MapToolId
|
selectedToolId: MapToolId
|
||||||
) {
|
) {
|
||||||
const [isTokenMenuOpen, setIsTokenMenuOpen] = useState<boolean>(false);
|
|
||||||
const [tokenMenuOptions, setTokenMenuOptions] = useState<TokenMenuOptions>();
|
|
||||||
const [tokenDraggingOptions, setTokenDraggingOptions] =
|
|
||||||
useState<TokenDraggingOptions>();
|
|
||||||
|
|
||||||
const userId = useUserId();
|
const userId = useUserId();
|
||||||
|
|
||||||
const disabledTokens: Record<string, boolean> = {};
|
const disabledTokens: Record<string, boolean> = {};
|
||||||
// If we have a map and state and have the token permission disabled
|
if (mapState && map) {
|
||||||
// and are not the map owner
|
if (!mapState.editFlags.includes("tokens") && map.owner !== userId) {
|
||||||
if (
|
|
||||||
mapState &&
|
|
||||||
!mapState.editFlags.includes("tokens") &&
|
|
||||||
map?.owner !== userId
|
|
||||||
) {
|
|
||||||
for (let token of Object.values(mapState.tokens)) {
|
for (let token of Object.values(mapState.tokens)) {
|
||||||
if (token.owner !== userId) {
|
if (token.owner !== userId) {
|
||||||
disabledTokens[token.id] = true;
|
disabledTokens[token.id] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const [isTokenMenuOpen, setIsTokenMenuOpen] = useState<boolean>(false);
|
||||||
|
const [tokenMenuOptions, setTokenMenuOptions] = useState<TokenMenuOptions>();
|
||||||
|
const [tokenDraggingOptions, setTokenDraggingOptions] =
|
||||||
|
useState<TokenDraggingOptions>();
|
||||||
|
|
||||||
function handleTokenMenuOpen(tokenStateId: string, tokenImage: Konva.Node) {
|
function handleTokenMenuOpen(tokenStateId: string, tokenImage: Konva.Node) {
|
||||||
setTokenMenuOptions({ tokenStateId, tokenImage });
|
setTokenMenuOptions({ tokenStateId, tokenImage });
|
||||||
|
Loading…
Reference in New Issue
Block a user