@ynput/ayon-frontend-shared 0.3.7 → 0.3.9
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/components.cjs.js +1 -1
- package/dist/components.es.js +109 -106
- package/dist/components.es.js.map +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/components/SubtasksManager/SubtasksManagerWrapper.cjs.js +1 -1
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.cjs.js.map +1 -1
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js +3 -12
- package/dist/shared/src/components/SubtasksManager/SubtasksManagerWrapper.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +67 -65
- package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.cjs.js.map +1 -1
- package/dist/shared/src/containers/DetailsPanel/containers/DetailsPanelSubtasks.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/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js +118 -109
- package/dist/shared/src/containers/ProjectTreeTable/context/ProjectTableProvider.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.es.js +17 -16
- package/dist/shared/src/containers/ProjectTreeTable/widgets/SubtasksWidget.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/dist/types/components/SubtasksManager/SubtasksManagerWrapper.d.ts +2 -2
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableContext.d.ts +5 -0
- package/dist/types/containers/ProjectTreeTable/context/ProjectTableProvider.d.ts +6 -1
- package/package.json +1 -1
|
@@ -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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"}
|
|
@@ -30,7 +30,7 @@ import "../../../components/Chips/Chips.es.js";
|
|
|
30
30
|
import "date-fns";
|
|
31
31
|
import "../../../components/DateRangePicker/DateRangePicker.styled.es.js";
|
|
32
32
|
import "../../../components/LinksManager/CellEditingDialog.es.js";
|
|
33
|
-
import { toast as
|
|
33
|
+
import { toast as p } from "react-toastify";
|
|
34
34
|
import "../../../api/base/client.es.js";
|
|
35
35
|
import "../../../api/generated/graphql.es.js";
|
|
36
36
|
import "../../../api/generated/graphqlLinks.es.js";
|
|
@@ -262,111 +262,118 @@ import "../../../components/Menu/MenuItem.es.js";
|
|
|
262
262
|
import "../widgets/EmptyWidget.es.js";
|
|
263
263
|
import "../widgets/ErrorWidget.es.js";
|
|
264
264
|
import "../widgets/LoadMoreWidget.es.js";
|
|
265
|
-
const Ve = ({ children:
|
|
266
|
-
const [
|
|
265
|
+
const Ve = ({ children: x }) => {
|
|
266
|
+
const [f, D] = B(null), T = w((o) => o === f, [f]), E = W(), {
|
|
267
267
|
pushHistory: U,
|
|
268
|
+
undo: K,
|
|
269
|
+
redo: N,
|
|
270
|
+
canUndo: F,
|
|
271
|
+
canRedo: k,
|
|
268
272
|
removeHistoryEntries: P
|
|
269
|
-
}
|
|
270
|
-
|
|
273
|
+
} = E, { selectedCells: I } = V(), { updateEntities: v, inheritFromParent: l } = X({
|
|
274
|
+
pushHistory: U,
|
|
275
|
+
removeHistoryEntries: P
|
|
276
|
+
}), { attribFields: u, getEntityById: _ } = O(), c = w(
|
|
277
|
+
async (o = [], t = !0) => {
|
|
271
278
|
try {
|
|
272
|
-
return Z(
|
|
279
|
+
return Z(o, u), await v(o, t);
|
|
273
280
|
} catch (r) {
|
|
274
|
-
return
|
|
281
|
+
return p.error(r.message), Promise.reject(r);
|
|
275
282
|
}
|
|
276
283
|
},
|
|
277
|
-
[v,
|
|
278
|
-
),
|
|
279
|
-
const [
|
|
280
|
-
if (
|
|
284
|
+
[v, u]
|
|
285
|
+
), y = async () => {
|
|
286
|
+
const [o, t, r] = K() || [];
|
|
287
|
+
if (o && o.length > 0)
|
|
281
288
|
try {
|
|
282
|
-
await c(
|
|
289
|
+
await c(o, !1);
|
|
283
290
|
} catch {
|
|
284
|
-
|
|
291
|
+
p.error("Failed to undo changes");
|
|
285
292
|
}
|
|
286
293
|
if (t && t.length > 0)
|
|
287
294
|
try {
|
|
288
295
|
await l(t, !1);
|
|
289
296
|
} catch {
|
|
290
|
-
|
|
297
|
+
p.error("Failed to inherit changes");
|
|
291
298
|
}
|
|
292
|
-
r && r.length > 0 && r.forEach((
|
|
299
|
+
r && r.length > 0 && r.forEach((i) => {
|
|
293
300
|
try {
|
|
294
|
-
|
|
301
|
+
i();
|
|
295
302
|
} catch {
|
|
296
|
-
|
|
303
|
+
p.error("Failed to execute custom undo action");
|
|
297
304
|
}
|
|
298
305
|
});
|
|
299
|
-
},
|
|
300
|
-
const [
|
|
301
|
-
if (
|
|
306
|
+
}, h = async () => {
|
|
307
|
+
const [o, t, r] = N() || [];
|
|
308
|
+
if (o && o.length > 0)
|
|
302
309
|
try {
|
|
303
|
-
await c(
|
|
310
|
+
await c(o, !1);
|
|
304
311
|
} catch {
|
|
305
|
-
|
|
312
|
+
p.error("Failed to redo changes");
|
|
306
313
|
}
|
|
307
314
|
if (t && t.length > 0)
|
|
308
315
|
try {
|
|
309
316
|
await l(t, !1);
|
|
310
317
|
} catch {
|
|
311
|
-
|
|
318
|
+
p.error("Failed to inherit changes");
|
|
312
319
|
}
|
|
313
|
-
r && r.length > 0 && r.forEach((
|
|
320
|
+
r && r.length > 0 && r.forEach((i) => {
|
|
314
321
|
try {
|
|
315
|
-
|
|
322
|
+
i();
|
|
316
323
|
} catch {
|
|
317
|
-
|
|
324
|
+
p.error("Failed to execute custom redo action");
|
|
318
325
|
}
|
|
319
326
|
});
|
|
320
|
-
},
|
|
321
|
-
async (
|
|
327
|
+
}, A = w(
|
|
328
|
+
async (o) => {
|
|
322
329
|
const t = [], r = [];
|
|
323
|
-
for (const
|
|
324
|
-
const { colId:
|
|
325
|
-
if (!
|
|
326
|
-
console.warn(`Invalid cellId: ${
|
|
330
|
+
for (const i of o) {
|
|
331
|
+
const { colId: s, rowId: n } = z(i) || {};
|
|
332
|
+
if (!s || !n) {
|
|
333
|
+
console.warn(`Invalid cellId: ${i}`);
|
|
327
334
|
continue;
|
|
328
335
|
}
|
|
329
|
-
const e = _(
|
|
336
|
+
const e = _(n);
|
|
330
337
|
if (!e) return;
|
|
331
|
-
const
|
|
332
|
-
if (!
|
|
333
|
-
console.warn(`Invalid column ID: ${
|
|
338
|
+
const m = s.replace("attrib_", ""), d = s.startsWith("attrib_");
|
|
339
|
+
if (!m) {
|
|
340
|
+
console.warn(`Invalid column ID: ${s}`);
|
|
334
341
|
continue;
|
|
335
342
|
}
|
|
336
|
-
let
|
|
337
|
-
if (
|
|
338
|
-
const g =
|
|
343
|
+
let a = null;
|
|
344
|
+
if (d) {
|
|
345
|
+
const g = u.find((b) => b.name === m);
|
|
339
346
|
if (!g) {
|
|
340
|
-
console.warn(`Attribute field not found: ${
|
|
347
|
+
console.warn(`Attribute field not found: ${m}`);
|
|
341
348
|
continue;
|
|
342
349
|
}
|
|
343
350
|
if (g.data.inherit) {
|
|
344
|
-
const
|
|
345
|
-
|
|
351
|
+
const b = r.find((M) => M.entityId === e.entityId);
|
|
352
|
+
b ? b.attribs.push(m) : r.push({
|
|
346
353
|
entityId: e.entityId,
|
|
347
|
-
attribs: [
|
|
354
|
+
attribs: [m],
|
|
348
355
|
entityType: e.entityType,
|
|
349
356
|
ownAttrib: e.ownAttrib || [],
|
|
350
|
-
rowId:
|
|
357
|
+
rowId: n,
|
|
351
358
|
folderId: e.entityType === "folder" ? e.parentId : e.entityType === "task" ? e.folderId : void 0
|
|
352
359
|
});
|
|
353
360
|
continue;
|
|
354
361
|
} else
|
|
355
|
-
|
|
356
|
-
} else if (
|
|
357
|
-
|
|
358
|
-
else if (
|
|
359
|
-
|
|
362
|
+
a = g.data.default || C(g.data.type);
|
|
363
|
+
} else if (m === "assignees")
|
|
364
|
+
a = C("list_of_strings");
|
|
365
|
+
else if (m === "tags")
|
|
366
|
+
a = C("list_of_strings");
|
|
360
367
|
else {
|
|
361
|
-
console.warn(`Field not editable: ${
|
|
368
|
+
console.warn(`Field not editable: ${m}`);
|
|
362
369
|
continue;
|
|
363
370
|
}
|
|
364
371
|
const H = {
|
|
365
|
-
id:
|
|
366
|
-
rowId:
|
|
367
|
-
field:
|
|
368
|
-
value:
|
|
369
|
-
isAttrib:
|
|
372
|
+
id: n,
|
|
373
|
+
rowId: n,
|
|
374
|
+
field: m,
|
|
375
|
+
value: a,
|
|
376
|
+
isAttrib: d,
|
|
370
377
|
type: e.entityType
|
|
371
378
|
};
|
|
372
379
|
t.push(H);
|
|
@@ -374,62 +381,61 @@ const Ve = ({ children: F }) => {
|
|
|
374
381
|
if (t.length > 0)
|
|
375
382
|
try {
|
|
376
383
|
await c(t, !0);
|
|
377
|
-
} catch (
|
|
378
|
-
|
|
384
|
+
} catch (i) {
|
|
385
|
+
p.error("Failed to clear selected cells"), console.error("Error clearing selected cells:", i);
|
|
379
386
|
}
|
|
380
387
|
if (r.length > 0)
|
|
381
388
|
try {
|
|
382
389
|
await l(r, !0);
|
|
383
|
-
} catch (
|
|
384
|
-
|
|
390
|
+
} catch (i) {
|
|
391
|
+
p.error("Failed to inherit parent values for cleared cells"), console.error("Error clearing inherited cells:", i);
|
|
385
392
|
}
|
|
386
|
-
t.length === 0 && r.length === 0 &&
|
|
393
|
+
t.length === 0 && r.length === 0 && p.warn("No valid cells selected to clear");
|
|
387
394
|
},
|
|
388
|
-
[
|
|
395
|
+
[u, v]
|
|
389
396
|
), j = L(
|
|
390
397
|
() => ({
|
|
391
|
-
editingCellId:
|
|
398
|
+
editingCellId: f,
|
|
392
399
|
setEditingCellId: D,
|
|
393
400
|
isEditing: T,
|
|
394
401
|
updateEntities: c,
|
|
395
402
|
inheritFromParent: l,
|
|
396
|
-
undo:
|
|
397
|
-
redo:
|
|
398
|
-
history:
|
|
403
|
+
undo: y,
|
|
404
|
+
redo: h,
|
|
405
|
+
history: E
|
|
399
406
|
}),
|
|
400
407
|
[
|
|
401
|
-
|
|
408
|
+
f,
|
|
402
409
|
T,
|
|
403
410
|
c,
|
|
404
411
|
l,
|
|
405
|
-
u,
|
|
406
412
|
y,
|
|
407
|
-
|
|
413
|
+
h,
|
|
414
|
+
E
|
|
408
415
|
]
|
|
409
416
|
);
|
|
410
417
|
return $(() => {
|
|
411
|
-
const
|
|
418
|
+
const o = (t) => {
|
|
412
419
|
const r = t.target;
|
|
413
|
-
if (r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.isContentEditable || r.getAttribute("role") === "textbox" || r.tagName === "LI")
|
|
414
|
-
|
|
415
|
-
const m = typeof navigator < "u" && // @ts-expect-error
|
|
420
|
+
if (r.tagName === "INPUT" || r.tagName === "TEXTAREA" || r.isContentEditable || r.getAttribute("role") === "textbox" || r.tagName === "LI" || !(r?.closest("table") !== null || r === document.body)) return;
|
|
421
|
+
const n = typeof navigator < "u" && // @ts-expect-error
|
|
416
422
|
(navigator.userAgentData && // @ts-expect-error
|
|
417
423
|
navigator.userAgentData.platform.toUpperCase().includes("MAC") || navigator.userAgent.toUpperCase().includes("MAC")) ? t.metaKey : t.ctrlKey;
|
|
418
|
-
if (
|
|
419
|
-
if (!
|
|
424
|
+
if (n && t.key === "z" && (t.preventDefault(), F && y()), (n && t.key === "y" || n && t.shiftKey && t.key === "z" || n && t.key === "Z") && (t.preventDefault(), k && h()), t.key === "Backspace" && !(t.ctrlKey || t.metaKey) || t.key === "Delete") {
|
|
425
|
+
if (!I.size) return;
|
|
420
426
|
t.preventDefault();
|
|
421
|
-
const
|
|
427
|
+
const e = Array.from(I).map(
|
|
422
428
|
(a) => document.getElementById(a)
|
|
423
|
-
),
|
|
424
|
-
if (
|
|
425
|
-
|
|
429
|
+
), m = (a) => a?.classList.contains("editable"), d = e.filter(m);
|
|
430
|
+
if (d.length === 0) {
|
|
431
|
+
p.warn("No editable cells selected to clear");
|
|
426
432
|
return;
|
|
427
433
|
}
|
|
428
|
-
|
|
434
|
+
A(d.map((a) => a?.id).filter(Boolean));
|
|
429
435
|
}
|
|
430
436
|
};
|
|
431
|
-
return document.addEventListener("keydown",
|
|
432
|
-
}, [
|
|
437
|
+
return document.addEventListener("keydown", o), () => document.removeEventListener("keydown", o);
|
|
438
|
+
}, [F, k, y, h, I, A]), /* @__PURE__ */ R.jsx(S.Provider, { value: j, children: x });
|
|
433
439
|
};
|
|
434
440
|
export {
|
|
435
441
|
Ve as CellEditingProvider
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CellEditingProvider.es.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.es.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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectTableContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport { EntityMap, TableRow } from '../types/table'\nimport {\n FindInheritedValueFromAncestors,\n GetAncestorsOf,\n GetInheritedDependents,\n FindNonInheritedValues,\n} from '../hooks/useFolderRelationships'\nimport { RowId } from '../utils/cellUtils'\n\nimport { ProjectTableProviderProps } from './ProjectTableProvider'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport type ToggleExpandAll = (rowIds: RowId[], expand?: boolean) => void\nexport type ToggleExpands = (rowIds: RowId[], expand?: boolean) => void\n\nexport interface ProjectTableContextType {\n isInitialized: ProjectTableProviderProps['isInitialized']\n isLoading: ProjectTableProviderProps['isLoading']\n users: ProjectTableProviderProps['users']\n // Attributes\n attribFields: ProjectTableProviderProps['attribFields']\n attribFieldsScoped: ProjectTableProviderProps['attribFields']\n error?: string\n scopes: ProjectTableProviderProps['scopes']\n\n // Data\n tableData: TableRow[]\n tasksMap: ProjectTableProviderProps['tasksMap']\n foldersMap: ProjectTableProviderProps['foldersMap']\n entitiesMap: ProjectTableProviderProps['entitiesMap']\n fetchNextPage: ProjectTableProviderProps['fetchNextPage']\n reloadTableData: ProjectTableProviderProps['reloadTableData']\n getEntityById: (id: string, field?: string) => EntityMap | undefined // if the entity is not found, we explicity search for the field\n\n // grouping\n groups: ProjectTableProviderProps['groups']\n\n // Filters\n queryFilters: ProjectTableProviderProps['queryFilters']\n\n // Hierarchy\n showHierarchy: ProjectTableProviderProps['showHierarchy']\n updateShowHierarchy: ProjectTableProviderProps['updateShowHierarchy']\n\n // Expanded state\n expanded: ProjectTableProviderProps['expanded']\n setExpanded: ProjectTableProviderProps['setExpanded']\n toggleExpanded: ProjectTableProviderProps['toggleExpanded']\n updateExpanded: ProjectTableProviderProps['updateExpanded']\n toggleExpandAll: ToggleExpandAll\n toggleExpands: ToggleExpands // expand/collapse multiple rows at once\n\n // Folder Relationships\n getInheritedDependents: GetInheritedDependents\n findInheritedValueFromAncestors: FindInheritedValueFromAncestors\n findNonInheritedValues: FindNonInheritedValues\n getAncestorsOf: GetAncestorsOf\n\n // Context menu\n contextMenuItems: ProjectTableProviderProps['contextMenuItems']\n\n // Powerpack context\n powerpack?: ProjectTableProviderProps['powerpack']\n\n // remote modules\n modules: ProjectTableProviderProps['modules']\n\n // SubtasksManager\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: ProjectTableProviderProps['playerOpen']\n onOpenPlayer?: ProjectTableProviderProps['onOpenPlayer']\n\n //
|
|
1
|
+
{"version":3,"file":"ProjectTableContext.cjs.js","sources":["../../../../../../src/containers/ProjectTreeTable/context/ProjectTableContext.ts"],"sourcesContent":["import { createContext, useContext } from 'react'\nimport { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'\nimport { EntityMap, TableRow } from '../types/table'\nimport {\n FindInheritedValueFromAncestors,\n GetAncestorsOf,\n GetInheritedDependents,\n FindNonInheritedValues,\n} from '../hooks/useFolderRelationships'\nimport { RowId } from '../utils/cellUtils'\n\nimport { ProjectTableProviderProps } from './ProjectTableProvider'\nimport type { SubtasksManagerProps } from '@shared/components'\n\nexport type ToggleExpandAll = (rowIds: RowId[], expand?: boolean) => void\nexport type ToggleExpands = (rowIds: RowId[], expand?: boolean) => void\n\nexport interface ProjectTableContextType {\n isInitialized: ProjectTableProviderProps['isInitialized']\n isLoading: ProjectTableProviderProps['isLoading']\n users: ProjectTableProviderProps['users']\n // Attributes\n attribFields: ProjectTableProviderProps['attribFields']\n attribFieldsScoped: ProjectTableProviderProps['attribFields']\n error?: string\n scopes: ProjectTableProviderProps['scopes']\n\n // Data\n tableData: TableRow[]\n tasksMap: ProjectTableProviderProps['tasksMap']\n foldersMap: ProjectTableProviderProps['foldersMap']\n entitiesMap: ProjectTableProviderProps['entitiesMap']\n fetchNextPage: ProjectTableProviderProps['fetchNextPage']\n reloadTableData: ProjectTableProviderProps['reloadTableData']\n getEntityById: (id: string, field?: string) => EntityMap | undefined // if the entity is not found, we explicity search for the field\n\n // grouping\n groups: ProjectTableProviderProps['groups']\n\n // Filters\n queryFilters: ProjectTableProviderProps['queryFilters']\n\n // Hierarchy\n showHierarchy: ProjectTableProviderProps['showHierarchy']\n updateShowHierarchy: ProjectTableProviderProps['updateShowHierarchy']\n\n // Expanded state\n expanded: ProjectTableProviderProps['expanded']\n setExpanded: ProjectTableProviderProps['setExpanded']\n toggleExpanded: ProjectTableProviderProps['toggleExpanded']\n updateExpanded: ProjectTableProviderProps['updateExpanded']\n toggleExpandAll: ToggleExpandAll\n toggleExpands: ToggleExpands // expand/collapse multiple rows at once\n\n // Folder Relationships\n getInheritedDependents: GetInheritedDependents\n findInheritedValueFromAncestors: FindInheritedValueFromAncestors\n findNonInheritedValues: FindNonInheritedValues\n getAncestorsOf: GetAncestorsOf\n\n // Context menu\n contextMenuItems: ProjectTableProviderProps['contextMenuItems']\n\n // Powerpack context\n powerpack?: ProjectTableProviderProps['powerpack']\n\n // remote modules\n modules: ProjectTableProviderProps['modules']\n\n // SubtasksManager\n SubtasksManager?: React.ComponentType<SubtasksManagerProps>\n\n // player\n playerOpen?: ProjectTableProviderProps['playerOpen']\n onOpenPlayer?: ProjectTableProviderProps['onOpenPlayer']\n\n // Views\n onResetView?: () => void\n\n // router hooks\n useParams?: typeof useParams\n useNavigate?: typeof useNavigate\n useLocation?: typeof useLocation\n useSearchParams?: typeof useSearchParams\n}\n\nexport const ProjectTableContext = createContext<ProjectTableContextType | undefined>(undefined)\n\nexport const useProjectTableContext = () => {\n const context = useContext(ProjectTableContext)\n if (!context) {\n throw new Error('useProjectTableContext must be used within a ProjectTableProvider')\n }\n return context\n}\n"],"names":["ProjectTableContext","createContext","useProjectTableContext","context","useContext"],"mappings":"yGAsFaA,EAAsBC,EAAAA,cAAmD,MAAS,EAElFC,EAAyB,IAAM,CAC1C,MAAMC,EAAUC,EAAAA,WAAWJ,CAAmB,EAC9C,GAAI,CAACG,EACH,MAAM,IAAI,MAAM,mEAAmE,EAErF,OAAOA,CACT"}
|