@ynput/ayon-frontend-shared 0.3.7 → 0.3.8
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/dist/_virtual/index.cjs10.js +1 -1
- package/dist/_virtual/index.cjs11.js +1 -1
- package/dist/_virtual/index.cjs12.js +1 -1
- package/dist/_virtual/index.es10.js +3 -3
- package/dist/_virtual/index.es11.js +5 -5
- package/dist/_virtual/index.es12.js +5 -5
- package/dist/components.cjs.js +1 -1
- package/dist/components.es.js +109 -106
- package/dist/components.es.js.map +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/unified/lib/index.es.js +2 -2
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype/node_modules/vfile/lib/index.es.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.cjs.js +1 -1
- package/dist/node_modules/rehype-parse/lib/index.es.js +1 -1
- package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js +2 -2
- package/dist/shared/src/components/LinksManager/CellEditingDialog.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js +22 -21
- package/dist/shared/src/components/LinksManager/CellEditingDialog.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js +87 -81
- package/dist/shared/src/containers/ProjectTreeTable/context/CellEditingProvider.es.js.map +1 -1
- package/dist/types/components/LinksManager/CellEditingDialog.d.ts +1 -0
- package/dist/types/components/LinksManager/index.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { useRef as
|
|
3
|
-
import
|
|
4
|
-
import { createPortal as
|
|
5
|
-
const
|
|
1
|
+
import { j as D } from "../../../../_virtual/jsx-runtime.es.js";
|
|
2
|
+
import { useRef as N, useState as u, useLayoutEffect as w } from "react";
|
|
3
|
+
import j from "styled-components";
|
|
4
|
+
import { createPortal as z } from "react-dom";
|
|
5
|
+
const I = "block-dialog-close", K = j.div`
|
|
6
6
|
position: fixed;
|
|
7
7
|
z-index: 310;
|
|
8
8
|
overflow: hidden;
|
|
9
9
|
display: flex;
|
|
10
10
|
flex-direction: column;
|
|
11
|
-
`,
|
|
11
|
+
`, X = ({
|
|
12
12
|
isEditing: l,
|
|
13
13
|
anchorId: k,
|
|
14
|
+
containerClassName: A = "table-container",
|
|
14
15
|
onClose: d,
|
|
15
|
-
children:
|
|
16
|
+
children: C
|
|
16
17
|
}) => {
|
|
17
|
-
const h =
|
|
18
|
+
const h = N(null), [s, x] = u(null), [v, b] = u(void 0), [y, R] = u(void 0), o = document.getElementById(k), r = o?.closest(`.${A}`), E = () => {
|
|
18
19
|
if (!l) return;
|
|
19
20
|
if (!o || !r) {
|
|
20
21
|
x({
|
|
@@ -24,15 +25,15 @@ const z = "block-dialog-close", I = N.div`
|
|
|
24
25
|
}), b(void 0), R(void 0);
|
|
25
26
|
return;
|
|
26
27
|
}
|
|
27
|
-
const t = o.getBoundingClientRect(), n = r.getBoundingClientRect(), e = n.right,
|
|
28
|
+
const t = o.getBoundingClientRect(), n = r.getBoundingClientRect(), e = n.right, O = window.innerWidth - n.right, i = 24, P = 250, c = 400, S = 600, H = window.innerWidth, B = window.innerHeight, L = e - t.left;
|
|
28
29
|
let a = {}, p = c;
|
|
29
30
|
L < c ? t.right - i >= c ? a.right = Math.max(
|
|
30
31
|
H - t.right,
|
|
31
|
-
i +
|
|
32
|
+
i + O
|
|
32
33
|
) : (a.left = i, p = H - 2 * i) : (a.left = t.left, p = Math.max(c, L)), b(p);
|
|
33
|
-
const g =
|
|
34
|
+
const g = B - t.bottom - i, T = t.top - i;
|
|
34
35
|
let m, W = !1, f;
|
|
35
|
-
g <
|
|
36
|
+
g < P && T > g ? (W = !0, m = t.top - 4, f = T - 4) : (m = t.bottom + 4, f = g - 4), R(Math.min(Math.max(200, f), S)), x({
|
|
36
37
|
top: m,
|
|
37
38
|
...a,
|
|
38
39
|
showAbove: W
|
|
@@ -54,19 +55,19 @@ const z = "block-dialog-close", I = N.div`
|
|
|
54
55
|
!e.closest(".entity-picker-dialog") && // check we are not clicking on the dialog backdrop
|
|
55
56
|
!e.querySelector(".entity-picker-dialog") && // check we are not clicking inside another dialog
|
|
56
57
|
!e.closest("dialog") && // check we are not clicking inside a dropdown
|
|
57
|
-
!e.closest(".dropdown") && !e.closest(".p-dialog-mask") && !e.closest(".p-datepicker") && !e.closest("." +
|
|
58
|
+
!e.closest(".dropdown") && !e.closest(".p-dialog-mask") && !e.closest(".p-datepicker") && !e.closest("." + I) && d?.();
|
|
58
59
|
};
|
|
59
60
|
return document.addEventListener("mousedown", t), () => {
|
|
60
61
|
document.removeEventListener("mousedown", t);
|
|
61
62
|
};
|
|
62
63
|
}, [d, o]);
|
|
63
|
-
const
|
|
64
|
+
const M = (t) => {
|
|
64
65
|
const n = t.target;
|
|
65
66
|
n.tagName === "INPUT" || n.tagName === "TEXTAREA" || n.isContentEditable || t.key === "Escape" && (t.stopPropagation(), d?.());
|
|
66
67
|
};
|
|
67
|
-
return l ?
|
|
68
|
-
/* @__PURE__ */
|
|
69
|
-
|
|
68
|
+
return l ? z(
|
|
69
|
+
/* @__PURE__ */ D.jsx(
|
|
70
|
+
K,
|
|
70
71
|
{
|
|
71
72
|
ref: h,
|
|
72
73
|
style: {
|
|
@@ -79,15 +80,15 @@ const z = "block-dialog-close", I = N.div`
|
|
|
79
80
|
maxHeight: y ? `${y}px` : "none"
|
|
80
81
|
},
|
|
81
82
|
className: "links-widget-popup",
|
|
82
|
-
onKeyDown:
|
|
83
|
-
children:
|
|
83
|
+
onKeyDown: M,
|
|
84
|
+
children: C
|
|
84
85
|
}
|
|
85
86
|
),
|
|
86
87
|
document.body
|
|
87
88
|
) : null;
|
|
88
89
|
};
|
|
89
90
|
export {
|
|
90
|
-
|
|
91
|
-
|
|
91
|
+
I as BLOCK_DIALOG_CLOSE_CLASS,
|
|
92
|
+
X as CellEditingDialog
|
|
92
93
|
};
|
|
93
94
|
//# sourceMappingURL=CellEditingDialog.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellEditingDialog.es.js","sources":["../../../../../src/components/LinksManager/CellEditingDialog.tsx"],"sourcesContent":["import { FC, useRef, useLayoutEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nexport const BLOCK_DIALOG_CLOSE_CLASS = 'block-dialog-close'\n\nconst StyledPopUp = styled.div`\n position: fixed;\n z-index: 310;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`\n\ntype Position = {\n top: number\n left?: number\n right?: number\n showAbove?: boolean\n}\n\nexport interface LinksManagerDialogProps {\n isEditing: boolean\n anchorId: string\n onClose?: () => void\n children?: React.ReactNode\n}\n\nexport const CellEditingDialog: FC<LinksManagerDialogProps> = ({\n isEditing,\n anchorId,\n onClose,\n children,\n}) => {\n const popupRef = useRef<HTMLDivElement>(null)\n\n const [position, setPosition] = useState<Position | null>(null)\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined)\n const [maxHeight, setMaxHeight] = useState<number | undefined>(undefined)\n\n // get the cell element based on the cellId\n const anchorElement = document.getElementById(anchorId)\n const tableContainer = anchorElement?.closest('.table-container')\n\n const updatePosition = () => {\n if (!isEditing) return\n\n if (!anchorElement || !tableContainer) {\n // if the anchor element is not found, position in the center of the screen\n setPosition({\n top: window.innerHeight / 2,\n left: window.innerWidth / 2,\n showAbove: false,\n })\n setMaxWidth(undefined)\n setMaxHeight(undefined)\n return\n }\n\n const cellRect = anchorElement.getBoundingClientRect()\n\n const containerRect = tableContainer.getBoundingClientRect()\n const containerRight = containerRect.right\n const containerToRightOfScreen = window.innerWidth - containerRect.right\n\n const screenPadding = 24\n const minHeightThreshold = 250\n const minWidthThreshold = 400\n const maxMaxHeight = 600\n const screenWidth = window.innerWidth\n const screenHeight = window.innerHeight\n\n // Check if we have enough space to the right of the cell\n const spaceToRight = containerRight - cellRect.left\n let position: { left?: number; right?: number } = {}\n let dialogWidth = minWidthThreshold\n\n if (spaceToRight < minWidthThreshold) {\n // Not enough space to the right, anchor to the right side of the cell\n const spaceToLeft = cellRect.right - screenPadding\n if (spaceToLeft >= minWidthThreshold) {\n // Anchor to the right side of the cell\n position.right = Math.max(\n screenWidth - cellRect.right,\n screenPadding + containerToRightOfScreen,\n )\n } else {\n // Not enough space on either side, center and use available width\n position.left = screenPadding\n dialogWidth = screenWidth - 2 * screenPadding\n }\n } else {\n // Enough space to the right, position normally\n position.left = cellRect.left\n dialogWidth = Math.max(minWidthThreshold, spaceToRight)\n }\n\n setMaxWidth(dialogWidth)\n\n const spaceBelow = screenHeight - cellRect.bottom - screenPadding\n const spaceAbove = cellRect.top - screenPadding\n let top: number\n let showAbove = false\n let availableHeight: number\n\n if (spaceBelow < minHeightThreshold && spaceAbove > spaceBelow) {\n showAbove = true\n top = cellRect.top - 4\n availableHeight = spaceAbove - 4\n } else {\n top = cellRect.bottom + 4\n availableHeight = spaceBelow - 4\n }\n\n // Set max height to prevent dialog from going off screen\n setMaxHeight(Math.min(Math.max(200, availableHeight), maxMaxHeight)) // Minimum 200px height\n\n setPosition({\n top,\n ...position,\n showAbove,\n })\n }\n\n useLayoutEffect(() => {\n updatePosition()\n }, [isEditing, anchorElement])\n\n // watch for when the tableContainer width changes\n useLayoutEffect(() => {\n if (tableContainer) {\n const resizeObserver = new ResizeObserver(() => {\n updatePosition()\n })\n resizeObserver.observe(tableContainer)\n return () => resizeObserver.disconnect()\n }\n }, [tableContainer, anchorElement])\n\n // close the dialog when clicking outside of it\n useLayoutEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n\n if (\n popupRef.current &&\n !popupRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target) &&\n // check we are not clicking inside the EntityPickerDialog\n !target.closest('.entity-picker-dialog') &&\n // check we are not clicking on the dialog backdrop\n !target.querySelector('.entity-picker-dialog') &&\n // check we are not clicking inside another dialog\n !target.closest('dialog') &&\n // check we are not clicking inside a dropdown\n !target.closest('.dropdown') &&\n !target.closest('.p-dialog-mask') &&\n !target.closest('.p-datepicker') &&\n !target.closest('.' + BLOCK_DIALOG_CLOSE_CLASS)\n ) {\n onClose?.()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [onClose, anchorElement])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // check we are not inside an input or textarea\n const target = e.target as HTMLElement\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return\n }\n\n // close dialog on escape\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose?.()\n }\n }\n\n if (!isEditing) return null\n return createPortal(\n <StyledPopUp\n ref={popupRef}\n style={{\n top: position?.top,\n left: position?.left,\n right: position?.right,\n ...(position?.showAbove && { transform: 'translateY(-100%)' }),\n visibility: position ? 'visible' : 'hidden',\n maxWidth: maxWidth ? `${maxWidth}px` : 'none',\n maxHeight: maxHeight ? `${maxHeight}px` : 'none',\n }}\n className=\"links-widget-popup\"\n onKeyDown={handleKeyDown}\n >\n {children}\n </StyledPopUp>,\n document.body,\n )\n}\n"],"names":["BLOCK_DIALOG_CLOSE_CLASS","StyledPopUp","styled","CellEditingDialog","isEditing","anchorId","onClose","children","popupRef","useRef","position","setPosition","useState","maxWidth","setMaxWidth","maxHeight","setMaxHeight","anchorElement","tableContainer","updatePosition","cellRect","containerRect","containerRight","containerToRightOfScreen","screenPadding","minHeightThreshold","minWidthThreshold","maxMaxHeight","screenWidth","screenHeight","spaceToRight","dialogWidth","spaceBelow","spaceAbove","top","showAbove","availableHeight","useLayoutEffect","resizeObserver","handleClickOutside","event","target","handleKeyDown","e","createPortal","jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CellEditingDialog.es.js","sources":["../../../../../src/components/LinksManager/CellEditingDialog.tsx"],"sourcesContent":["import { FC, useRef, useLayoutEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport { createPortal } from 'react-dom'\n\nexport const BLOCK_DIALOG_CLOSE_CLASS = 'block-dialog-close'\n\nconst StyledPopUp = styled.div`\n position: fixed;\n z-index: 310;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n`\n\ntype Position = {\n top: number\n left?: number\n right?: number\n showAbove?: boolean\n}\n\nexport interface LinksManagerDialogProps {\n isEditing: boolean\n anchorId: string\n containerClassName?: string\n onClose?: () => void\n children?: React.ReactNode\n}\n\nexport const CellEditingDialog: FC<LinksManagerDialogProps> = ({\n isEditing,\n anchorId,\n containerClassName = 'table-container',\n onClose,\n children,\n}) => {\n const popupRef = useRef<HTMLDivElement>(null)\n\n const [position, setPosition] = useState<Position | null>(null)\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined)\n const [maxHeight, setMaxHeight] = useState<number | undefined>(undefined)\n\n // get the cell element based on the cellId\n const anchorElement = document.getElementById(anchorId)\n const tableContainer = anchorElement?.closest(`.${containerClassName}`)\n\n const updatePosition = () => {\n if (!isEditing) return\n\n if (!anchorElement || !tableContainer) {\n // if the anchor element is not found, position in the center of the screen\n setPosition({\n top: window.innerHeight / 2,\n left: window.innerWidth / 2,\n showAbove: false,\n })\n setMaxWidth(undefined)\n setMaxHeight(undefined)\n return\n }\n\n const cellRect = anchorElement.getBoundingClientRect()\n\n const containerRect = tableContainer.getBoundingClientRect()\n const containerRight = containerRect.right\n const containerToRightOfScreen = window.innerWidth - containerRect.right\n\n const screenPadding = 24\n const minHeightThreshold = 250\n const minWidthThreshold = 400\n const maxMaxHeight = 600\n const screenWidth = window.innerWidth\n const screenHeight = window.innerHeight\n\n // Check if we have enough space to the right of the cell\n const spaceToRight = containerRight - cellRect.left\n let position: { left?: number; right?: number } = {}\n let dialogWidth = minWidthThreshold\n\n if (spaceToRight < minWidthThreshold) {\n // Not enough space to the right, anchor to the right side of the cell\n const spaceToLeft = cellRect.right - screenPadding\n if (spaceToLeft >= minWidthThreshold) {\n // Anchor to the right side of the cell\n position.right = Math.max(\n screenWidth - cellRect.right,\n screenPadding + containerToRightOfScreen,\n )\n } else {\n // Not enough space on either side, center and use available width\n position.left = screenPadding\n dialogWidth = screenWidth - 2 * screenPadding\n }\n } else {\n // Enough space to the right, position normally\n position.left = cellRect.left\n dialogWidth = Math.max(minWidthThreshold, spaceToRight)\n }\n\n setMaxWidth(dialogWidth)\n\n const spaceBelow = screenHeight - cellRect.bottom - screenPadding\n const spaceAbove = cellRect.top - screenPadding\n let top: number\n let showAbove = false\n let availableHeight: number\n\n if (spaceBelow < minHeightThreshold && spaceAbove > spaceBelow) {\n showAbove = true\n top = cellRect.top - 4\n availableHeight = spaceAbove - 4\n } else {\n top = cellRect.bottom + 4\n availableHeight = spaceBelow - 4\n }\n\n // Set max height to prevent dialog from going off screen\n setMaxHeight(Math.min(Math.max(200, availableHeight), maxMaxHeight)) // Minimum 200px height\n\n setPosition({\n top,\n ...position,\n showAbove,\n })\n }\n\n useLayoutEffect(() => {\n updatePosition()\n }, [isEditing, anchorElement])\n\n // watch for when the tableContainer width changes\n useLayoutEffect(() => {\n if (tableContainer) {\n const resizeObserver = new ResizeObserver(() => {\n updatePosition()\n })\n resizeObserver.observe(tableContainer)\n return () => resizeObserver.disconnect()\n }\n }, [tableContainer, anchorElement])\n\n // close the dialog when clicking outside of it\n useLayoutEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as HTMLElement\n\n if (\n popupRef.current &&\n !popupRef.current.contains(target) &&\n anchorElement &&\n !anchorElement.contains(target) &&\n // check we are not clicking inside the EntityPickerDialog\n !target.closest('.entity-picker-dialog') &&\n // check we are not clicking on the dialog backdrop\n !target.querySelector('.entity-picker-dialog') &&\n // check we are not clicking inside another dialog\n !target.closest('dialog') &&\n // check we are not clicking inside a dropdown\n !target.closest('.dropdown') &&\n !target.closest('.p-dialog-mask') &&\n !target.closest('.p-datepicker') &&\n !target.closest('.' + BLOCK_DIALOG_CLOSE_CLASS)\n ) {\n onClose?.()\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside)\n return () => {\n document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [onClose, anchorElement])\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n // check we are not inside an input or textarea\n const target = e.target as HTMLElement\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {\n return\n }\n\n // close dialog on escape\n if (e.key === 'Escape') {\n e.stopPropagation()\n onClose?.()\n }\n }\n\n if (!isEditing) return null\n return createPortal(\n <StyledPopUp\n ref={popupRef}\n style={{\n top: position?.top,\n left: position?.left,\n right: position?.right,\n ...(position?.showAbove && { transform: 'translateY(-100%)' }),\n visibility: position ? 'visible' : 'hidden',\n maxWidth: maxWidth ? `${maxWidth}px` : 'none',\n maxHeight: maxHeight ? `${maxHeight}px` : 'none',\n }}\n className=\"links-widget-popup\"\n onKeyDown={handleKeyDown}\n >\n {children}\n </StyledPopUp>,\n document.body,\n )\n}\n"],"names":["BLOCK_DIALOG_CLOSE_CLASS","StyledPopUp","styled","CellEditingDialog","isEditing","anchorId","containerClassName","onClose","children","popupRef","useRef","position","setPosition","useState","maxWidth","setMaxWidth","maxHeight","setMaxHeight","anchorElement","tableContainer","updatePosition","cellRect","containerRect","containerRight","containerToRightOfScreen","screenPadding","minHeightThreshold","minWidthThreshold","maxMaxHeight","screenWidth","screenHeight","spaceToRight","dialogWidth","spaceBelow","spaceAbove","top","showAbove","availableHeight","useLayoutEffect","resizeObserver","handleClickOutside","event","target","handleKeyDown","e","createPortal","jsx"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../../../../../_virtual/jsx-runtime.cjs.js"),l=require("react");require("@ynput/ayon-react-components");require("short-uuid");const H=require("../utils/cellUtils.cjs.js"),I=require("../utils/getTypeDefaultValue.cjs.js");require("@tanstack/react-table");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("clsx");require("lodash");require("../../../components/AttributeEditor/components/MinMaxField.cjs.js");require("react-dom");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("date-fns");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");const o=require("react-toastify");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/SubtasksModulesContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("uuid");require("../../../util/pubsub.cjs.js");require("react-router-dom");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("@tanstack/react-virtual");require("../ProjectTreeTable.styled.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/ColumnHeaderMenu.cjs.js");const S=require("./CellEditingContext.cjs.js"),V=require("./SelectionCellsContext.cjs.js");require("./ClipboardContext.cjs.js");require("./SelectedRowsContext.cjs.js");require("./ColumnSettingsContext.cjs.js");require("./ProjectTableQueriesContext.cjs.js");const B=require("./ProjectTableContext.cjs.js");require("./ProjectDataContext.cjs.js");require("./DetailsPanelEntityContext.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");const L=require("../hooks/useHistory.cjs.js"),$=require("../hooks/useUpdateTableData.cjs.js"),z=require("../utils/validateUpdateEntities.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");require("../../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/match-sorter-utils");require("../../SimpleTable/context/SimpleTableContext.cjs.js");require("../../SimpleTable/SimpleTableRowTemplate.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../Slicer/components/SlicerSearch.cjs.js");require("../../Slicer/context/SlicerContext.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/context/ViewsContext.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../components/Feedback/FeedbackContext.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/PricingLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SearchFilter/filterDates.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/SortingSetting/SortingSetting.styled.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../widgets/EmptyWidget.cjs.js");require("../widgets/ErrorWidget.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");const O=({children:A})=>{const[f,D]=l.useState(null),T=l.useCallback(i=>i===f,[f]),C=L(),{pushHistory:F,undo:U,redo:P,canUndo:w,canRedo:k,removeHistoryEntries:j}=C,{selectedCells:E}=V.useSelectionCellsContext(),{updateEntities:v,inheritFromParent:c}=$({pushHistory:F,removeHistoryEntries:j}),{attribFields:y,getEntityById:K}=B.useProjectTableContext(),d=l.useCallback(async(i=[],e=!0)=>{try{return z(i,y),await v(i,e)}catch(r){return o.toast.error(r.message),Promise.reject(r)}},[v,y]),g=async()=>{const[i,e,r]=U()||[];if(i&&i.length>0)try{await d(i,!1)}catch{o.toast.error("Failed to undo changes")}if(e&&e.length>0)try{await c(e,!1)}catch{o.toast.error("Failed to inherit changes")}r&&r.length>0&&r.forEach(t=>{try{t()}catch{o.toast.error("Failed to execute custom undo action")}})},h=async()=>{const[i,e,r]=P()||[];if(i&&i.length>0)try{await d(i,!1)}catch{o.toast.error("Failed to redo changes")}if(e&&e.length>0)try{await c(e,!1)}catch{o.toast.error("Failed to inherit changes")}r&&r.length>0&&r.forEach(t=>{try{t()}catch{o.toast.error("Failed to execute custom redo action")}})},x=l.useCallback(async i=>{const e=[],r=[];for(const t of i){const{colId:n,rowId:s}=H.parseCellId(t)||{};if(!n||!s){console.warn(`Invalid cellId: ${t}`);continue}const u=K(s);if(!u)return;const q=n.replace("attrib_",""),a=n.startsWith("attrib_");if(!q){console.warn(`Invalid column ID: ${n}`);continue}let p=null;if(a){const b=y.find(m=>m.name===q);if(!b){console.warn(`Attribute field not found: ${q}`);continue}if(b.data.inherit){const m=r.find(M=>M.entityId===u.entityId);m?m.attribs.push(q):r.push({entityId:u.entityId,attribs:[q],entityType:u.entityType,ownAttrib:u.ownAttrib||[],rowId:s,folderId:u.entityType==="folder"?u.parentId:u.entityType==="task"?u.folderId:void 0});continue}else p=b.data.default||I.getTypeDefaultValue(b.data.type)}else if(q==="assignees")p=I.getTypeDefaultValue("list_of_strings");else if(q==="tags")p=I.getTypeDefaultValue("list_of_strings");else{console.warn(`Field not editable: ${q}`);continue}const R={id:s,rowId:s,field:q,value:p,isAttrib:a,type:u.entityType};e.push(R)}if(e.length>0)try{await d(e,!0)}catch(t){o.toast.error("Failed to clear selected cells"),console.error("Error clearing selected cells:",t)}if(r.length>0)try{await c(r,!0)}catch(t){o.toast.error("Failed to inherit parent values for cleared cells"),console.error("Error clearing inherited cells:",t)}e.length===0&&r.length===0&&o.toast.warn("No valid cells selected to clear")},[y,v]),N=l.useMemo(()=>({editingCellId:f,setEditingCellId:D,isEditing:T,updateEntities:d,inheritFromParent:c,undo:g,redo:h,history:C}),[f,T,d,c,g,h,C]);return l.useEffect(()=>{const i=e=>{const r=e.target;if(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable||r.getAttribute("role")==="textbox"||r.tagName==="LI")return;const n=typeof navigator<"u"&&(navigator.userAgentData&&navigator.userAgentData.platform.toUpperCase().includes("MAC")||navigator.userAgent.toUpperCase().includes("MAC"))?e.metaKey:e.ctrlKey;if(n&&e.key==="z"&&(e.preventDefault(),w&&g()),(n&&e.key==="y"||n&&e.shiftKey&&e.key==="z"||n&&e.key==="Z")&&(e.preventDefault(),k&&h()),e.key==="Backspace"&&!(e.ctrlKey||e.metaKey)||e.key==="Delete"){if(!E.size)return;e.preventDefault();const s=Array.from(E).map(a=>document.getElementById(a)),u=a=>a?.classList.contains("editable"),q=s.filter(u);if(q.length===0){o.toast.warn("No editable cells selected to clear");return}x(q.map(a=>a?.id).filter(Boolean))}};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[w,k,g,h,E,x]),_.jsxRuntimeExports.jsx(S.CellEditingContext.Provider,{value:N,children:A})};exports.CellEditingProvider=O;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const _=require("../../../../../_virtual/jsx-runtime.cjs.js"),l=require("react");require("@ynput/ayon-react-components");require("short-uuid");const H=require("../utils/cellUtils.cjs.js"),I=require("../utils/getTypeDefaultValue.cjs.js");require("@tanstack/react-table");require("../widgets/CollapsedWidget.cjs.js");require("../widgets/DateWidget.cjs.js");require("../widgets/EnumWidget.cjs.js");require("../widgets/TextWidget.cjs.js");require("../widgets/BooleanWidget.cjs.js");require("../widgets/CellWidget.cjs.js");require("../widgets/EntityNameWidget.cjs.js");require("../widgets/GroupHeaderWidget.cjs.js");require("../widgets/ThumbnailWidget.cjs.js");require("../../../components/AddonLoadingScreen/AddonLoadingScreen.cjs.js");require("../../../../../node_modules/match-sorter/dist/match-sorter.esm.cjs.js");require("../../../components/AccessSearchInput/AccessSearchInput.styled.cjs.js");require("../../../components/AccessUser/AccessUser.cjs.js");require("clsx");require("lodash");require("../../../components/AttributeEditor/components/MinMaxField.cjs.js");require("react-dom");require("@dnd-kit/core");require("@dnd-kit/sortable");require("../../../components/EnumEditor/EnumEditor.styled.cjs.js");require("../../../components/Badge/Badge.cjs.js");require("../../../components/Chips/Chips.cjs.js");require("date-fns");require("../../../components/DateRangePicker/DateRangePicker.styled.cjs.js");require("../../../components/LinksManager/CellEditingDialog.cjs.js");const n=require("react-toastify");require("../../../api/base/client.cjs.js");require("../../../api/generated/graphql.cjs.js");require("../../../api/generated/graphqlLinks.cjs.js");require("../../../api/generated/access.cjs.js");require("../../../api/generated/actions.cjs.js");require("../../../api/generated/activityFeed.cjs.js");require("../../../api/generated/addons.cjs.js");require("../../../api/generated/anatomy.cjs.js");require("../../../api/generated/attributes.cjs.js");require("../../../api/generated/authentication.cjs.js");require("../../../api/generated/bundles.cjs.js");require("../../../api/generated/configuration.cjs.js");require("../../../api/generated/desktop.cjs.js");require("../../../api/generated/entityLists.cjs.js");require("../../../api/generated/events.cjs.js");require("../../../api/generated/files.cjs.js");require("../../../api/generated/folders.cjs.js");require("../../../api/generated/inbox.cjs.js");require("../../../api/generated/links.cjs.js");require("../../../api/generated/market.cjs.js");require("../../../api/generated/onboarding.cjs.js");require("../../../api/generated/operations.cjs.js");require("../../../api/generated/products.cjs.js");require("../../../api/generated/projectDashboard.cjs.js");require("../../../api/generated/projects.cjs.js");require("../../../api/generated/reviewables.cjs.js");require("../../../api/generated/services.cjs.js");require("../../../api/generated/system.cjs.js");require("../../../api/generated/tasks.cjs.js");require("../../../api/generated/teams.cjs.js");require("../../../api/generated/thumbnails.cjs.js");require("../../../api/generated/uRIs.cjs.js");require("../../../api/generated/users.cjs.js");require("../../../api/generated/versions.cjs.js");require("../../../api/generated/workfiles.cjs.js");require("../../../api/generated/ynputCloud.cjs.js");require("../../../api/generated/grouping.cjs.js");require("../../../api/generated/views.cjs.js");require("../../../api/queries/actions/getActions.cjs.js");require("../../../api/queries/activities/getActivities.cjs.js");require("../../../api/queries/activities/updateActivities.cjs.js");require("../../../api/queries/activities/updateReaction.cjs.js");require("../../../api/queries/activities/getMentions.cjs.js");require("../../../api/queries/activities/getCategories.cjs.js");require("../../../api/queries/addons/getAddons.cjs.js");require("../../../api/queries/addons/updateAddons.cjs.js");require("../../../api/queries/attributes/getAttributes.cjs.js");require("../../../api/queries/attributes/updateAttributes.cjs.js");require("../../../api/queries/authentication/getAuthentication.cjs.js");require("../../../api/queries/cloud/cloud.cjs.js");require("../../../api/queries/config/getConfig.cjs.js");require("../../../api/queries/config/updateConfig.cjs.js");require("../../../api/queries/entities/getEntity.cjs.js");require("../../../api/queries/entities/getEntityPanel.cjs.js");require("../../../api/queries/entities/updateEntity.cjs.js");require("../../../api/queries/entityLists/getLists.cjs.js");require("../../../api/queries/entityLists/updateLists.cjs.js");require("../../../api/queries/entityLists/getListsAttributes.cjs.js");require("../../../api/queries/entityLists/updateListsAttributes.cjs.js");require("../../../api/queries/entityLists/listFolders.cjs.js");require("../../../api/queries/folders/getFolders.cjs.js");require("../../../api/queries/grouping/getGrouping.cjs.js");require("../../../api/queries/links/updateLinks.cjs.js");require("../../../api/queries/links/getLinks.cjs.js");require("../../../api/queries/links/getEntityLinks.cjs.js");require("../../../api/queries/overview/getOverview.cjs.js");require("../../../api/queries/overview/updateOverview.cjs.js");require("../../../api/queries/versions/getVersionsProducts.cjs.js");require("../../../api/queries/permissions/getPermissions.cjs.js");require("../../../api/queries/products/createProduct.cjs.js");require("../../../api/queries/project/getProject.cjs.js");require("../../../api/queries/project/updateProject.cjs.js");require("../../../api/queries/review/getReview.cjs.js");require("../../../api/queries/review/updateReview.cjs.js");require("../../../api/queries/share/share.cjs.js");require("../../../api/queries/system/getSystem.cjs.js");require("../../../api/queries/tasks/updateTasks.cjs.js");require("../../../api/queries/userDashboard/getUserDashboard.cjs.js");require("../../../api/queries/users/getUsers.cjs.js");require("../../../api/queries/users/updateUsers.cjs.js");require("../../../api/queries/users/guests.cjs.js");require("../../../api/queries/versions/updateVersions.cjs.js");require("../../../api/queries/views/getViews.cjs.js");require("../../../api/queries/views/updateViews.cjs.js");require("../../../api/queries/watchers/getWatchers.cjs.js");require("../../../api/queries/uris/getUris.cjs.js");require("../../../components/DetailsPanelAttributes/DetailsPanelAttributesEditor.cjs.js");require("../../../components/DetailsPanelDetails/DetailsPanelDetails.cjs.js");require("../../../components/DetailsPanelDetails/DetailsSection.cjs.js");require("../../../components/DetailsPanelDetails/FieldLabel.cjs.js");require("../../../components/DoneCheckbox/DoneCheckbox.cjs.js");require("../../../components/EarlyPreview/EarlyPreview.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");require("../../ContextMenu/ContextMenuContext.cjs.js");;/* empty css */require("../../Feed/context/FeedContext.cjs.js");require("../../Feed/components/Tooltips/UserTooltip/UserTooltip.styled.cjs.js");require("../../Feed/components/Tooltips/EntityTooltip/EntityTooltip.styled.cjs.js");require("../../../context/RemoteModulesContext.cjs.js");require("../../../context/DetailsPanelContext.cjs.js");require("../../../context/SubtasksModulesContext.cjs.js");require("../../../context/ThumbnailUploaderContext.cjs.js");require("../../../context/SettingsPanelContext.cjs.js");require("../../../context/pip/PiPProvider.cjs.js");require("../../../context/pip/PiPWrapper.cjs.js");require("../../../context/AddonProjectContext.cjs.js");require("../../../context/AddonContext.cjs.js");require("../../../context/PowerpackContext.cjs.js");require("../../../context/MoveEntityContext.cjs.js");require("../../../context/MenuContext.cjs.js");require("../../../context/WebsocketContext.cjs.js");require("../../../context/GlobalContext.cjs.js");require("../../../context/ProjectContext.cjs.js");require("../../../context/ProjectFoldersContext.cjs.js");require("../../../context/UriContext.cjs.js");require("../../Feed/components/FileUploadPreview/FileUploadPreview.styled.cjs.js");require("../../Feed/components/FileUploadPreview/Mimes/TextMime.cjs.js");require("react-markdown");require("remark-emoji");require("remark-gfm");require("remark-directive");require("remark-directive-rehype");require("../../Feed/components/CommentInput/CommentInput.cjs.js");require("../../Feed/components/ReactionContainer/Reactions.styled.cjs.js");require("../../Feed/components/FilesGrid/FilesGrid.styled.cjs.js");require("../../Feed/components/FileUploadCard/FileUploadCard.styled.cjs.js");require("../../Feed/components/CommentInput/quillToMarkdown.cjs.js");require("../../Feed/components/ActivityComment/ActivityComment.styled.cjs.js");require("../../Feed/components/ActivityCheckbox/ActivityCheckbox.styled.cjs.js");require("../../Feed/components/ActivityReference/ActivityReference.styled.cjs.js");require("uuid");require("../../../util/pubsub.cjs.js");require("react-router-dom");require("../../Feed/components/ActivityStatus/ActivityStatus.cjs.js");require("../../Feed/components/ActivityHeader/ActivityHeader.styled.cjs.js");require("../../Feed/components/ActivityDate.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryTag.cjs.js");require("../../Feed/components/ActivityStatusChange/ActivityStatusChange.styled.cjs.js");require("../../Feed/components/ActivityAssigneeChange/ActivityAssigneeChange.styled.cjs.js");require("../../Feed/components/ActivityVersions/ActivityVersions.styled.cjs.js");require("../../Feed/components/ActivityGroup/ActivityGroup.styled.cjs.js");require("../../Feed/Feed.styled.cjs.js");require("../../DetailsPanel/components/TabHeaderAndFilters/TabHeaderAndFilters.styled.cjs.js");require("../../Feed/components/ActivityCategorySelect/ActivityCategorySelect.cjs.js");require("../../Feed/components/ActivityCategorySelect/CategoryDropdownItem.cjs.js");require("@tanstack/react-virtual");require("../ProjectTreeTable.styled.cjs.js");require("../components/HeaderActionButton.cjs.js");require("../components/RowSelectionHeader.cjs.js");require("../components/SelectionCell.cjs.js");require("../components/ColumnHeaderMenu.cjs.js");const S=require("./CellEditingContext.cjs.js"),V=require("./SelectionCellsContext.cjs.js");require("./ClipboardContext.cjs.js");require("./SelectedRowsContext.cjs.js");require("./ColumnSettingsContext.cjs.js");require("./ProjectTableQueriesContext.cjs.js");const B=require("./ProjectTableContext.cjs.js");require("./ProjectDataContext.cjs.js");require("./DetailsPanelEntityContext.cjs.js");require("../../EntityPickerDialog/EntityPickerDialog.cjs.js");const L=require("../hooks/useHistory.cjs.js"),$=require("../hooks/useUpdateTableData.cjs.js"),z=require("../utils/validateUpdateEntities.cjs.js");require("../../../../../_virtual/runtime.cjs.js");require("../../../../../_virtual/semver.cjs.js");require("react-redux");require("custom-protocol-check");require("../components/GroupSettingsFallback.cjs.js");require("../../SimpleTable/SimpleTable.styled.cjs.js");require("@tanstack/match-sorter-utils");require("../../SimpleTable/context/SimpleTableContext.cjs.js");require("../../SimpleTable/SimpleTableRowTemplate.cjs.js");require("../../Slicer/hooks/useTableDataBySlice.cjs.js");require("../../Slicer/components/SlicerSearch.cjs.js");require("../../Slicer/context/SlicerContext.cjs.js");require("../../DetailsPanel/DetailsPanel.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelTabs/DetailsPanelTabs.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelHeader/DetailsPanelHeader.styled.cjs.js");require("../../../components/PlayableIcon/PlayableIcon.cjs.js");require("../../DetailsPanel/components/DetailsPanelFiles/DetailsPanelFiles.cjs.js");require("../../DetailsPanel/components/DetailsPanelSlideOut/DetailsPanelSlideOut.styled.cjs.js");require("../../DetailsPanel/components/DetailsPanelFloating/DetailsPanelFloating.styled.cjs.js");require("../../Actions/Actions.styled.cjs.js");require("../../Actions/ActionsDropdown/ActionsDropdown.cjs.js");require("../../Actions/ActionIcon.cjs.js");require("../../Views/context/ViewsContext.cjs.js");require("../../Views/Views.styled.cjs.js");require("../../Views/ViewsMenuContainer/ViewsMenuContainer.cjs.js");require("../../Views/ViewsMenu/ViewsMenu.cjs.js");require("../../../components/EntityPanelUploader/EntityPanelUploader.styled.cjs.js");require("axios");require("../../../components/ReviewablesList/ReviewablesList.styled.cjs.js");require("../../../components/ReviewablesList/ReviewablesUpload.styled.cjs.js");require("../../../components/EntityPath/EntityPath.styled.cjs.js");require("../../../components/EntityPath/SegmentProvider.cjs.js");require("../../../components/FeaturedVersionOrder/FeaturedVersionOrder.cjs.js");require("../../../components/Feedback/FeedbackContext.cjs.js");require("../../../components/Feedback/SupportBubble.cjs.js");require("../../../components/FileThumbnail/FileThumbnail.cjs.js");require("../../../components/LegacyBadge/LegacyBadge.cjs.js");require("../../../components/LinksManager/LinksManager.styled.cjs.js");require("../../../components/Powerpack/PowerpackButton.cjs.js");require("../../../components/Powerpack/PricingLink.cjs.js");require("../../../components/Powerpack/PowerpackDialog.styled.cjs.js");require("../../../components/Powerpack/CTAButton.cjs.js");require("../../../components/Powerpack/RequiredAddonVersion.cjs.js");require("../../../components/ProjectTableSettings/ProjectTableSettings.cjs.js");require("../../../components/SizeSlider/SizeSlider.cjs.js");require("../../../components/ReviewableCard/ReviewableCard.cjs.js");require("../../../components/ReviewableProgressCard/ReviewableProgressCard.styled.cjs.js");require("../../../components/SearchFilter/filterDates.cjs.js");require("../../../components/SettingsPanel/SettingsPanel.cjs.js");require("../../../components/SettingsPanel/SettingsPanelItemTemplate.cjs.js");require("../../../components/ShareOptionIcon/ShareOptionIcon.cjs.js");require("../../../components/SimpleFormDialog/SimpleFormDialog.cjs.js");require("../../../components/SortingSetting/SortingSetting.styled.cjs.js");require("../../../components/StyledLink/StyledLink.cjs.js");require("../../../components/TableGridSwitch/TableGridSwitch.cjs.js");require("../../../components/Thumbnail/Thumbnail.styled.cjs.js");require("../../../components/Thumbnail/StackedThumbnails.cjs.js");require("../../../components/ThumbnailSimple/ThumbnailSimple.cjs.js");require("../../../components/VersionUploader/components/UploadVersionDialog.cjs.js");require("../../../components/VersionUploader/context/VersionUploadContext.cjs.js");require("../../../components/Watchers/Watchers.cjs.js");require("../../../components/Menu/Menu.styled.cjs.js");require("../../../components/Menu/MenuItem.cjs.js");require("../widgets/EmptyWidget.cjs.js");require("../widgets/ErrorWidget.cjs.js");require("../widgets/LoadMoreWidget.cjs.js");const O=({children:F})=>{const[y,A]=l.useState(null),T=l.useCallback(i=>i===y,[y]),C=L(),{pushHistory:D,undo:U,redo:P,canUndo:w,canRedo:k,removeHistoryEntries:j}=C,{selectedCells:E}=V.useSelectionCellsContext(),{updateEntities:v,inheritFromParent:c}=$({pushHistory:D,removeHistoryEntries:j}),{attribFields:g,getEntityById:K}=B.useProjectTableContext(),d=l.useCallback(async(i=[],e=!0)=>{try{return z(i,g),await v(i,e)}catch(r){return n.toast.error(r.message),Promise.reject(r)}},[v,g]),h=async()=>{const[i,e,r]=U()||[];if(i&&i.length>0)try{await d(i,!1)}catch{n.toast.error("Failed to undo changes")}if(e&&e.length>0)try{await c(e,!1)}catch{n.toast.error("Failed to inherit changes")}r&&r.length>0&&r.forEach(t=>{try{t()}catch{n.toast.error("Failed to execute custom undo action")}})},p=async()=>{const[i,e,r]=P()||[];if(i&&i.length>0)try{await d(i,!1)}catch{n.toast.error("Failed to redo changes")}if(e&&e.length>0)try{await c(e,!1)}catch{n.toast.error("Failed to inherit changes")}r&&r.length>0&&r.forEach(t=>{try{t()}catch{n.toast.error("Failed to execute custom redo action")}})},x=l.useCallback(async i=>{const e=[],r=[];for(const t of i){const{colId:s,rowId:o}=H.parseCellId(t)||{};if(!s||!o){console.warn(`Invalid cellId: ${t}`);continue}const u=K(o);if(!u)return;const q=s.replace("attrib_",""),f=s.startsWith("attrib_");if(!q){console.warn(`Invalid column ID: ${s}`);continue}let a=null;if(f){const b=g.find(m=>m.name===q);if(!b){console.warn(`Attribute field not found: ${q}`);continue}if(b.data.inherit){const m=r.find(M=>M.entityId===u.entityId);m?m.attribs.push(q):r.push({entityId:u.entityId,attribs:[q],entityType:u.entityType,ownAttrib:u.ownAttrib||[],rowId:o,folderId:u.entityType==="folder"?u.parentId:u.entityType==="task"?u.folderId:void 0});continue}else a=b.data.default||I.getTypeDefaultValue(b.data.type)}else if(q==="assignees")a=I.getTypeDefaultValue("list_of_strings");else if(q==="tags")a=I.getTypeDefaultValue("list_of_strings");else{console.warn(`Field not editable: ${q}`);continue}const R={id:o,rowId:o,field:q,value:a,isAttrib:f,type:u.entityType};e.push(R)}if(e.length>0)try{await d(e,!0)}catch(t){n.toast.error("Failed to clear selected cells"),console.error("Error clearing selected cells:",t)}if(r.length>0)try{await c(r,!0)}catch(t){n.toast.error("Failed to inherit parent values for cleared cells"),console.error("Error clearing inherited cells:",t)}e.length===0&&r.length===0&&n.toast.warn("No valid cells selected to clear")},[g,v]),N=l.useMemo(()=>({editingCellId:y,setEditingCellId:A,isEditing:T,updateEntities:d,inheritFromParent:c,undo:h,redo:p,history:C}),[y,T,d,c,h,p,C]);return l.useEffect(()=>{const i=e=>{const r=e.target;if(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable||r.getAttribute("role")==="textbox"||r.tagName==="LI"||!(r?.closest("table")!==null||r===document.body))return;const o=typeof navigator<"u"&&(navigator.userAgentData&&navigator.userAgentData.platform.toUpperCase().includes("MAC")||navigator.userAgent.toUpperCase().includes("MAC"))?e.metaKey:e.ctrlKey;if(o&&e.key==="z"&&(e.preventDefault(),w&&h()),(o&&e.key==="y"||o&&e.shiftKey&&e.key==="z"||o&&e.key==="Z")&&(e.preventDefault(),k&&p()),e.key==="Backspace"&&!(e.ctrlKey||e.metaKey)||e.key==="Delete"){if(!E.size)return;e.preventDefault();const u=Array.from(E).map(a=>document.getElementById(a)),q=a=>a?.classList.contains("editable"),f=u.filter(q);if(f.length===0){n.toast.warn("No editable cells selected to clear");return}x(f.map(a=>a?.id).filter(Boolean))}};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[w,k,h,p,E,x]),_.jsxRuntimeExports.jsx(S.CellEditingContext.Provider,{value:N,children:F})};exports.CellEditingProvider=O;
|
|
2
2
|
//# sourceMappingURL=CellEditingProvider.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellEditingProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/CellEditingProvider.tsx"],"sourcesContent":["import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\nimport { CellId, getTypeDefaultValue, parseCellId } from '../utils'\nimport useHistory from '../hooks/useHistory'\nimport { useSelectionCellsContext } from './SelectionCellsContext'\nimport useUpdateTableData, {\n EntityUpdate,\n InheritFromParentEntity,\n UpdateTableEntities,\n} from '../hooks/useUpdateTableData'\nimport { useProjectTableContext } from './ProjectTableContext'\nimport validateUpdateEntities from '../utils/validateUpdateEntities'\nimport { toast } from 'react-toastify'\nimport { CellEditingContext } from './CellEditingContext'\n\nexport const CellEditingProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [editingCellId, setEditingCellId] = useState<CellId | null>(null)\n\n // Memoize these functions to prevent unnecessary re-renders\n const isEditing = useCallback((id: CellId) => id === editingCellId, [editingCellId])\n\n // Get history functions\n const history = useHistory()\n const { pushHistory, undo: undoHistory, redo: redoHistory, canUndo, canRedo, removeHistoryEntries } = history\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities: updateOverviewEntities, inheritFromParent } = useUpdateTableData({\n pushHistory,\n removeHistoryEntries,\n })\n const { attribFields, getEntityById } = useProjectTableContext()\n\n const handleUpdateEntities: UpdateTableEntities = useCallback(\n async (entities = [], pushToHistory = true) => {\n try {\n // validate the entities before updating\n validateUpdateEntities(entities, attribFields)\n\n // if validation passes, update the entities\n return await updateOverviewEntities(entities, pushToHistory)\n } catch (error: any) {\n // if validation fails, show a toast and return\n toast.error(error.message)\n\n return Promise.reject(error)\n }\n },\n [updateOverviewEntities, attribFields],\n )\n\n // Handle undo\n const handleUndo = async () => {\n const [entitiesToUndo, entitiesToInherit, callbacks] = undoHistory() || []\n\n if (entitiesToUndo && entitiesToUndo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToUndo, false)\n } catch (error) {\n toast.error('Failed to undo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom undo action')\n }\n })\n }\n }\n\n // Handle redo\n const handleRedo = async () => {\n const [entitiesToRedo, entitiesToInherit, callbacks] = redoHistory() || []\n\n if (entitiesToRedo && entitiesToRedo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToRedo, false)\n } catch (error) {\n toast.error('Failed to redo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom redo action')\n }\n })\n }\n }\n\n // Handle clearing cells\n const handleClear = useCallback(\n async (cells: CellId[]) => {\n // we explicity update the value of the cells to their default values\n const entityUpdates: EntityUpdate[] = []\n // of if they are inheritable, we inherit from the parent entity\n const entityInheriting: InheritFromParentEntity[] = []\n\n for (const cellId of cells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n if (!colId || !rowId) {\n console.warn(`Invalid cellId: ${cellId}`)\n continue\n }\n\n // get the entity from the rowId\n const entity = getEntityById(rowId)\n\n if (!entity) return\n\n // get the field name and check if it is an attribute\n const fieldName = colId.replace('attrib_', '')\n const isAttrib = colId.startsWith('attrib_')\n\n if (!fieldName) {\n console.warn(`Invalid column ID: ${colId}`)\n continue\n }\n\n let defaultValue: any = null\n if (isAttrib) {\n // find default value for the attribute\n const attribField = attribFields.find((f) => f.name === fieldName)\n if (!attribField) {\n console.warn(`Attribute field not found: ${fieldName}`)\n continue\n }\n // check if the attribute is inheritable\n if (attribField.data.inherit) {\n // inherit from parent entity\n // check if this entity has already been added to the inheriting list\n const existingInherit = entityInheriting.find((e) => e.entityId === entity.entityId)\n if (existingInherit) {\n // add the attrib to the existing entity\n existingInherit.attribs.push(fieldName)\n } else {\n // add a new entity to the inheriting list\n entityInheriting.push({\n entityId: entity.entityId,\n attribs: [fieldName],\n entityType: entity.entityType,\n ownAttrib: entity.ownAttrib || [],\n rowId: rowId,\n folderId:\n entity.entityType === 'folder'\n ? entity.parentId\n : entity.entityType === 'task'\n ? entity.folderId\n : undefined,\n })\n }\n continue\n } else {\n // set explicit default value\n defaultValue = attribField.data.default || getTypeDefaultValue(attribField.data.type)\n }\n } else if (fieldName === 'assignees') {\n // for assignees, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else if (fieldName === 'tags') {\n // for tags, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else {\n // we ignore other fields\n console.warn(`Field not editable: ${fieldName}`)\n continue\n }\n\n // create the entity update\n const update: EntityUpdate = {\n id: rowId,\n rowId: rowId,\n field: fieldName,\n value: defaultValue,\n isAttrib,\n type: entity.entityType,\n }\n\n entityUpdates.push(update)\n }\n\n // if we have updates, call the updateEntities function\n if (entityUpdates.length > 0) {\n try {\n await handleUpdateEntities(entityUpdates, true)\n } catch (error) {\n toast.error('Failed to clear selected cells')\n console.error('Error clearing selected cells:', error)\n }\n }\n\n // if we have inheritable attributes, call inheritFromParent\n if (entityInheriting.length > 0) {\n try {\n await inheritFromParent(entityInheriting, true)\n } catch (error) {\n toast.error('Failed to inherit parent values for cleared cells')\n console.error('Error clearing inherited cells:', error)\n }\n }\n\n // if nothing was done, warn the user\n if (entityUpdates.length === 0 && entityInheriting.length === 0) {\n toast.warn('No valid cells selected to clear')\n }\n },\n [attribFields, updateOverviewEntities],\n )\n\n const value = useMemo(\n () => ({\n editingCellId,\n setEditingCellId,\n isEditing,\n updateEntities: handleUpdateEntities,\n inheritFromParent,\n undo: handleUndo,\n redo: handleRedo,\n history,\n }),\n [\n editingCellId,\n isEditing,\n handleUpdateEntities,\n inheritFromParent,\n handleUndo,\n handleRedo,\n history,\n ],\n )\n\n // Listen for shortcuts\n // undo - ctrl + z\n // redo - ctrl + y or ctrl + shift + z\n // clear - backspace or delete\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable ||\n target.getAttribute('role') === 'textbox' ||\n target.tagName === 'LI'\n ) {\n return\n }\n\n const isMac =\n typeof navigator !== 'undefined' &&\n // @ts-expect-error\n ((navigator.userAgentData &&\n // @ts-expect-error\n navigator.userAgentData.platform.toUpperCase().includes('MAC')) ||\n navigator.userAgent.toUpperCase().includes('MAC'))\n const ctrlKey = isMac ? e.metaKey : e.ctrlKey\n\n // undo\n if (ctrlKey && e.key === 'z') {\n e.preventDefault()\n if (canUndo) handleUndo()\n }\n // redo\n if (\n (ctrlKey && e.key === 'y') ||\n (ctrlKey && e.shiftKey && e.key === 'z') ||\n (ctrlKey && e.key === 'Z')\n ) {\n e.preventDefault()\n if (canRedo) handleRedo()\n }\n // clear\n if ((e.key === 'Backspace' && !(e.ctrlKey || e.metaKey)) || e.key === 'Delete') {\n // check we have cells selected\n if (!selectedCells.size) return\n e.preventDefault()\n\n // find selected cells elements\n const selectedCellElements = Array.from(selectedCells).map((cellId) =>\n document.getElementById(cellId),\n )\n\n // check the cell is editable from the classnames\n const isEditable = (cell: HTMLElement | null) => cell?.classList.contains('editable')\n\n // filter out non-editable cells\n const editableCells = selectedCellElements.filter(isEditable)\n if (editableCells.length === 0) {\n toast.warn('No editable cells selected to clear')\n return\n }\n // clear the selected cells\n handleClear(editableCells.map((cell) => cell?.id).filter(Boolean) as CellId[])\n }\n }\n\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [canUndo, canRedo, handleUndo, handleRedo, selectedCells, handleClear])\n\n return <CellEditingContext.Provider value={value}>{children}</CellEditingContext.Provider>\n}\n"],"names":["CellEditingProvider","children","editingCellId","setEditingCellId","useState","isEditing","useCallback","id","history","useHistory","pushHistory","undoHistory","redoHistory","canUndo","canRedo","removeHistoryEntries","selectedCells","useSelectionCellsContext","updateOverviewEntities","inheritFromParent","useUpdateTableData","attribFields","getEntityById","useProjectTableContext","handleUpdateEntities","entities","pushToHistory","validateUpdateEntities","error","toast","handleUndo","entitiesToUndo","entitiesToInherit","callbacks","callback","handleRedo","entitiesToRedo","handleClear","cells","entityUpdates","entityInheriting","cellId","colId","rowId","parseCellId","entity","fieldName","isAttrib","defaultValue","attribField","f","existingInherit","e","getTypeDefaultValue","update","value","useMemo","useEffect","onKeyDown","target","ctrlKey","selectedCellElements","isEditable","cell","editableCells","jsx","CellEditingContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CellEditingProvider.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/CellEditingProvider.tsx"],"sourcesContent":["import { ReactNode, useCallback, useEffect, useMemo, useState } from 'react'\nimport { CellId, getTypeDefaultValue, parseCellId } from '../utils'\nimport useHistory from '../hooks/useHistory'\nimport { useSelectionCellsContext } from './SelectionCellsContext'\nimport useUpdateTableData, {\n EntityUpdate,\n InheritFromParentEntity,\n UpdateTableEntities,\n} from '../hooks/useUpdateTableData'\nimport { useProjectTableContext } from './ProjectTableContext'\nimport validateUpdateEntities from '../utils/validateUpdateEntities'\nimport { toast } from 'react-toastify'\nimport { CellEditingContext } from './CellEditingContext'\n\nexport const CellEditingProvider: React.FC<{ children: ReactNode }> = ({ children }) => {\n const [editingCellId, setEditingCellId] = useState<CellId | null>(null)\n\n // Memoize these functions to prevent unnecessary re-renders\n const isEditing = useCallback((id: CellId) => id === editingCellId, [editingCellId])\n\n // Get history functions\n const history = useHistory()\n const {\n pushHistory,\n undo: undoHistory,\n redo: redoHistory,\n canUndo,\n canRedo,\n removeHistoryEntries,\n } = history\n\n const { selectedCells } = useSelectionCellsContext()\n const { updateEntities: updateOverviewEntities, inheritFromParent } = useUpdateTableData({\n pushHistory,\n removeHistoryEntries,\n })\n const { attribFields, getEntityById } = useProjectTableContext()\n\n const handleUpdateEntities: UpdateTableEntities = useCallback(\n async (entities = [], pushToHistory = true) => {\n try {\n // validate the entities before updating\n validateUpdateEntities(entities, attribFields)\n\n // if validation passes, update the entities\n return await updateOverviewEntities(entities, pushToHistory)\n } catch (error: any) {\n // if validation fails, show a toast and return\n toast.error(error.message)\n\n return Promise.reject(error)\n }\n },\n [updateOverviewEntities, attribFields],\n )\n\n // Handle undo\n const handleUndo = async () => {\n const [entitiesToUndo, entitiesToInherit, callbacks] = undoHistory() || []\n\n if (entitiesToUndo && entitiesToUndo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToUndo, false)\n } catch (error) {\n toast.error('Failed to undo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom undo action')\n }\n })\n }\n }\n\n // Handle redo\n const handleRedo = async () => {\n const [entitiesToRedo, entitiesToInherit, callbacks] = redoHistory() || []\n\n if (entitiesToRedo && entitiesToRedo.length > 0) {\n try {\n await handleUpdateEntities(entitiesToRedo, false)\n } catch (error) {\n toast.error('Failed to redo changes')\n }\n }\n if (entitiesToInherit && entitiesToInherit.length > 0) {\n try {\n await inheritFromParent(entitiesToInherit, false)\n } catch (error) {\n toast.error('Failed to inherit changes')\n }\n }\n // Execute custom callbacks if any\n if (callbacks && callbacks.length > 0) {\n callbacks.forEach((callback) => {\n try {\n callback()\n } catch (error) {\n toast.error('Failed to execute custom redo action')\n }\n })\n }\n }\n\n // Handle clearing cells\n const handleClear = useCallback(\n async (cells: CellId[]) => {\n // we explicity update the value of the cells to their default values\n const entityUpdates: EntityUpdate[] = []\n // of if they are inheritable, we inherit from the parent entity\n const entityInheriting: InheritFromParentEntity[] = []\n\n for (const cellId of cells) {\n const { colId, rowId } = parseCellId(cellId) || {}\n if (!colId || !rowId) {\n console.warn(`Invalid cellId: ${cellId}`)\n continue\n }\n\n // get the entity from the rowId\n const entity = getEntityById(rowId)\n\n if (!entity) return\n\n // get the field name and check if it is an attribute\n const fieldName = colId.replace('attrib_', '')\n const isAttrib = colId.startsWith('attrib_')\n\n if (!fieldName) {\n console.warn(`Invalid column ID: ${colId}`)\n continue\n }\n\n let defaultValue: any = null\n if (isAttrib) {\n // find default value for the attribute\n const attribField = attribFields.find((f) => f.name === fieldName)\n if (!attribField) {\n console.warn(`Attribute field not found: ${fieldName}`)\n continue\n }\n // check if the attribute is inheritable\n if (attribField.data.inherit) {\n // inherit from parent entity\n // check if this entity has already been added to the inheriting list\n const existingInherit = entityInheriting.find((e) => e.entityId === entity.entityId)\n if (existingInherit) {\n // add the attrib to the existing entity\n existingInherit.attribs.push(fieldName)\n } else {\n // add a new entity to the inheriting list\n entityInheriting.push({\n entityId: entity.entityId,\n attribs: [fieldName],\n entityType: entity.entityType,\n ownAttrib: entity.ownAttrib || [],\n rowId: rowId,\n folderId:\n entity.entityType === 'folder'\n ? entity.parentId\n : entity.entityType === 'task'\n ? entity.folderId\n : undefined,\n })\n }\n continue\n } else {\n // set explicit default value\n defaultValue = attribField.data.default || getTypeDefaultValue(attribField.data.type)\n }\n } else if (fieldName === 'assignees') {\n // for assignees, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else if (fieldName === 'tags') {\n // for tags, we set it to an empty array\n defaultValue = getTypeDefaultValue('list_of_strings')\n } else {\n // we ignore other fields\n console.warn(`Field not editable: ${fieldName}`)\n continue\n }\n\n // create the entity update\n const update: EntityUpdate = {\n id: rowId,\n rowId: rowId,\n field: fieldName,\n value: defaultValue,\n isAttrib,\n type: entity.entityType,\n }\n\n entityUpdates.push(update)\n }\n\n // if we have updates, call the updateEntities function\n if (entityUpdates.length > 0) {\n try {\n await handleUpdateEntities(entityUpdates, true)\n } catch (error) {\n toast.error('Failed to clear selected cells')\n console.error('Error clearing selected cells:', error)\n }\n }\n\n // if we have inheritable attributes, call inheritFromParent\n if (entityInheriting.length > 0) {\n try {\n await inheritFromParent(entityInheriting, true)\n } catch (error) {\n toast.error('Failed to inherit parent values for cleared cells')\n console.error('Error clearing inherited cells:', error)\n }\n }\n\n // if nothing was done, warn the user\n if (entityUpdates.length === 0 && entityInheriting.length === 0) {\n toast.warn('No valid cells selected to clear')\n }\n },\n [attribFields, updateOverviewEntities],\n )\n\n const value = useMemo(\n () => ({\n editingCellId,\n setEditingCellId,\n isEditing,\n updateEntities: handleUpdateEntities,\n inheritFromParent,\n undo: handleUndo,\n redo: handleRedo,\n history,\n }),\n [\n editingCellId,\n isEditing,\n handleUpdateEntities,\n inheritFromParent,\n handleUndo,\n handleRedo,\n history,\n ],\n )\n\n // Listen for shortcuts\n // undo - ctrl + z\n // redo - ctrl + y or ctrl + shift + z\n // clear - backspace or delete\n useEffect(() => {\n const onKeyDown = (e: KeyboardEvent) => {\n const target = e.target as HTMLElement\n if (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable ||\n target.getAttribute('role') === 'textbox' ||\n target.tagName === 'LI'\n ) {\n return\n }\n\n // check focus is on table or body\n const isTableFocused = target?.closest('table') !== null || target === document.body\n\n if (!isTableFocused) return\n\n const isMac =\n typeof navigator !== 'undefined' &&\n // @ts-expect-error\n ((navigator.userAgentData &&\n // @ts-expect-error\n navigator.userAgentData.platform.toUpperCase().includes('MAC')) ||\n navigator.userAgent.toUpperCase().includes('MAC'))\n const ctrlKey = isMac ? e.metaKey : e.ctrlKey\n\n // undo\n if (ctrlKey && e.key === 'z') {\n e.preventDefault()\n if (canUndo) handleUndo()\n }\n // redo\n if (\n (ctrlKey && e.key === 'y') ||\n (ctrlKey && e.shiftKey && e.key === 'z') ||\n (ctrlKey && e.key === 'Z')\n ) {\n e.preventDefault()\n if (canRedo) handleRedo()\n }\n // clear\n if ((e.key === 'Backspace' && !(e.ctrlKey || e.metaKey)) || e.key === 'Delete') {\n // check we have cells selected\n if (!selectedCells.size) return\n e.preventDefault()\n\n // find selected cells elements\n const selectedCellElements = Array.from(selectedCells).map((cellId) =>\n document.getElementById(cellId),\n )\n\n // check the cell is editable from the classnames\n const isEditable = (cell: HTMLElement | null) => cell?.classList.contains('editable')\n\n // filter out non-editable cells\n const editableCells = selectedCellElements.filter(isEditable)\n if (editableCells.length === 0) {\n toast.warn('No editable cells selected to clear')\n return\n }\n // clear the selected cells\n handleClear(editableCells.map((cell) => cell?.id).filter(Boolean) as CellId[])\n }\n }\n\n document.addEventListener('keydown', onKeyDown)\n return () => document.removeEventListener('keydown', onKeyDown)\n }, [canUndo, canRedo, handleUndo, handleRedo, selectedCells, handleClear])\n\n return <CellEditingContext.Provider value={value}>{children}</CellEditingContext.Provider>\n}\n"],"names":["CellEditingProvider","children","editingCellId","setEditingCellId","useState","isEditing","useCallback","id","history","useHistory","pushHistory","undoHistory","redoHistory","canUndo","canRedo","removeHistoryEntries","selectedCells","useSelectionCellsContext","updateOverviewEntities","inheritFromParent","useUpdateTableData","attribFields","getEntityById","useProjectTableContext","handleUpdateEntities","entities","pushToHistory","validateUpdateEntities","error","toast","handleUndo","entitiesToUndo","entitiesToInherit","callbacks","callback","handleRedo","entitiesToRedo","handleClear","cells","entityUpdates","entityInheriting","cellId","colId","rowId","parseCellId","entity","fieldName","isAttrib","defaultValue","attribField","f","existingInherit","e","getTypeDefaultValue","update","value","useMemo","useEffect","onKeyDown","target","ctrlKey","selectedCellElements","isEditable","cell","editableCells","jsx","CellEditingContext"],"mappings":"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"}
|