@ynput/ayon-frontend-shared 0.2.43 → 0.2.45

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.
Files changed (45) hide show
  1. package/dist/_virtual/index.cjs4.js +1 -1
  2. package/dist/_virtual/index.cjs5.js +1 -1
  3. package/dist/_virtual/index.es4.js +5 -2
  4. package/dist/_virtual/index.es4.js.map +1 -1
  5. package/dist/_virtual/index.es5.js +2 -5
  6. package/dist/_virtual/index.es5.js.map +1 -1
  7. package/dist/node_modules/remove-accents/index.cjs.js +1 -1
  8. package/dist/node_modules/remove-accents/index.es.js +1 -1
  9. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.cjs.js +1 -1
  10. package/dist/shared/node_modules/react-transition-group/esm/CSSTransition.es.js +1 -1
  11. package/dist/shared/node_modules/react-transition-group/esm/Transition.cjs.js +1 -1
  12. package/dist/shared/node_modules/react-transition-group/esm/Transition.es.js +1 -1
  13. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.cjs.js +1 -1
  14. package/dist/shared/node_modules/react-transition-group/esm/utils/PropTypes.es.js +1 -1
  15. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js +1 -1
  16. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.cjs.js.map +1 -1
  17. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js +73 -68
  18. package/dist/shared/src/api/queries/userDashboard/getUserDashboard.es.js.map +1 -1
  19. package/dist/shared/src/components/Menu/MenuContainer.cjs.js +1 -1
  20. package/dist/shared/src/components/Menu/MenuContainer.cjs.js.map +1 -1
  21. package/dist/shared/src/components/Menu/MenuContainer.es.js +58 -59
  22. package/dist/shared/src/components/Menu/MenuContainer.es.js.map +1 -1
  23. package/dist/shared/src/components/Menu/MenuItem.cjs.js +1 -1
  24. package/dist/shared/src/components/Menu/MenuItem.cjs.js.map +1 -1
  25. package/dist/shared/src/components/Menu/MenuItem.es.js +21 -21
  26. package/dist/shared/src/components/Menu/MenuItem.es.js.map +1 -1
  27. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js +1 -1
  28. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.cjs.js.map +1 -1
  29. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js +23 -22
  30. package/dist/shared/src/containers/DetailsPanel/DetailsPanel.es.js.map +1 -1
  31. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js +1 -1
  32. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.cjs.js.map +1 -1
  33. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js +2 -3
  34. package/dist/shared/src/containers/Feed/components/ActivityComment/ActivityComment.es.js.map +1 -1
  35. package/dist/shared/src/context/DetailsPanelContext.cjs.js +1 -1
  36. package/dist/shared/src/context/DetailsPanelContext.cjs.js.map +1 -1
  37. package/dist/shared/src/context/DetailsPanelContext.es.js +79 -80
  38. package/dist/shared/src/context/DetailsPanelContext.es.js.map +1 -1
  39. package/dist/shared/src/context/MenuContext.cjs.js +1 -1
  40. package/dist/shared/src/context/MenuContext.cjs.js.map +1 -1
  41. package/dist/shared/src/context/MenuContext.es.js +11 -10
  42. package/dist/shared/src/context/MenuContext.es.js.map +1 -1
  43. package/dist/types/api/queries/userDashboard/getUserDashboard.d.ts +1 -0
  44. package/dist/types/context/MenuContext.d.ts +3 -0
  45. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityComment.cjs.js","sources":["../../../../../../../src/containers/Feed/components/ActivityComment/ActivityComment.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport emoji from 'remark-emoji'\nimport remarkGfm from 'remark-gfm'\nimport remarkDirective from 'remark-directive'\nimport remarkDirectiveRehype from 'remark-directive-rehype'\n\nimport CommentInput from '../CommentInput/CommentInput'\nimport Reactions from '../ReactionContainer/Reactions'\nimport { Reaction } from '../ReactionContainer/types'\nimport useReferenceTooltip from '../../hooks/useReferenceTooltip'\nimport FilesGrid, { FilesGridProps } from '../FilesGrid/FilesGrid'\n\nimport { getTextRefs } from '../CommentInput/quillToMarkdown'\nimport * as Styled from './ActivityComment.styled'\nimport CommentWrapper from './CommentWrapper'\nimport { aTag, blockquoteTag, codeTag, inputTag } from './ActivityMarkdownComponents'\nimport { mapGraphQLReactions } from './mappers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport ActivityStatus from '../ActivityStatus/ActivityStatus'\nimport { useFeedContext } from '../../context/FeedContext'\nimport { confirmDelete } from '../../../../util'\nimport ActivityHeader, { ActivityHeaderProps } from '../ActivityHeader/ActivityHeader'\nimport { MenuContainer } from '@shared/components'\nimport { useMenuContext } from '@shared/context'\nimport type { Status } from '../../../ProjectTreeTable/types/project'\nimport { SavedAnnotationMetadata } from '../../index'\nimport { useDetailsPanelContext } from '@shared/context'\nimport { useBlendedCategoryColor } from '../CommentInput/hooks/useBlendedCategoryColor'\nimport { CategoryTag } from '../ActivityCategorySelect/CategoryTag'\nimport ActivityCommentMenu from './ActivityCommentMenu'\n\ntype Props = {\n activity: any\n onCheckChange?: Function\n onDelete?: (activityId: string, entityId: string, refs: any) => Promise<void>\n onUpdate?: (value: any, files: any, refs?: any, data?: any) => Promise<void>\n projectInfo: any\n editProps?: {\n disabled: boolean\n isLoading: boolean\n }\n projectName: string\n entityType: string\n onReferenceClick?: ActivityHeaderProps['onReferenceClick']\n onFileExpand?: FilesGridProps['onExpand']\n showOrigin?: boolean\n isHighlighted?: boolean\n readOnly?: boolean\n isSlideOut?: boolean\n statuses: Status[]\n}\n\nconst ActivityComment = ({\n activity = {},\n onCheckChange,\n onDelete,\n onUpdate,\n projectInfo,\n editProps,\n projectName,\n entityType,\n onReferenceClick,\n onFileExpand,\n showOrigin,\n isHighlighted,\n readOnly,\n isSlideOut,\n statuses = [],\n}: Props) => {\n const { userName, createReaction, deleteReaction, editingId, setEditingId, categories, isGuest } =\n useFeedContext()\n\n const moreRef = useRef<HTMLButtonElement>(null)\n const { toggleMenuOpen, menuOpen } = useMenuContext()\n\n const { categoryData, categoryNotFound } = useMemo(() => {\n let categoryNotFound = false\n if (activity.activityData?.category) {\n const foundCategory = categories.find((cat) => cat.name === activity.activityData?.category)\n if (!foundCategory) {\n categoryNotFound = true\n }\n return {\n categoryData: foundCategory || {\n name: activity.activityData?.category,\n color: '#c5c5c5',\n },\n categoryNotFound,\n }\n } else {\n return {\n categoryData: null,\n categoryNotFound,\n }\n }\n }, [activity?.activityData?.category, categories])\n // Compute blended background color for category\n const blendedCategoryColor = useBlendedCategoryColor(categoryData?.color)\n\n let {\n body,\n authorName,\n authorFullName,\n createdAt,\n referenceType,\n entityId,\n activityId,\n author,\n isOwner,\n files = [],\n origin,\n } = activity\n if (!authorName) authorName = author?.name || ''\n if (!authorFullName) authorFullName = author?.fullName || authorName\n\n const menuId = `activity-comment-menu-${activityId}-${isSlideOut ? 'slideout' : 'normal'}`\n const isMenuOpen = menuOpen === menuId\n\n const { onGoToFrame, setHighlightedActivities } = useDetailsPanelContext()\n\n const handleEditComment = () => {\n setEditingId(activityId)\n }\n\n const handleEditCancel = () => {\n // close the edit comment\n setEditingId(null)\n }\n\n const handleSave = async (value: any, files: any, data?: any) => {\n await onUpdate?.(value, files, undefined, data)\n setEditingId(null)\n }\n\n const isEditing = editingId === activityId\n\n const isRef = referenceType !== 'origin' || showOrigin\n\n const handleDelete = async () => {\n const refs = getTextRefs(body)\n\n // if the comment is a reference, (it's origin is not the entity)\n // we need to delete the reference from the origin as well\n // add it to the refs to delete\n if (isRef && origin) {\n refs.push({ id: origin.id, type: origin.type })\n }\n\n // note: body is used to match other refs to delete\n onDelete && (await onDelete(activityId, entityId, refs))\n }\n\n const deleteConfirmation = () => {\n confirmDelete({\n title: 'Delete comment',\n message: 'Are you sure you want to delete this comment?',\n accept: async () => {\n await handleDelete()\n },\n })\n }\n\n const [, setRefTooltip] = useReferenceTooltip()\n\n const mappedReactions = useMemo(\n () => mapGraphQLReactions(activity.reactions, userName),\n [[...(activity.reactions || [])]],\n )\n\n const reactionChangeHandler = (reaction: Reaction) => {\n if (reaction.isActive) {\n createReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n createReactionModel: {\n reaction: reaction.type,\n },\n })\n } else {\n deleteReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n reaction: reaction.type,\n })\n }\n }\n\n const onAnnotationClick = useCallback(\n (file: any) => {\n if (!file.annotation) return\n // annotation frame numbers are 1-based\n onGoToFrame?.((file.annotation as SavedAnnotationMetadata).range[0])\n setHighlightedActivities([activityId])\n },\n [onGoToFrame],\n )\n\n return (\n <>\n <Styled.Comment\n className={clsx('comment', {\n isOwner,\n isEditing,\n isHighlighted,\n category: !!categoryData && !isGuest,\n menuOpen: isMenuOpen,\n })}\n id={activityId}\n $categoryPrimary={categoryData?.color}\n $categoryTertiary={blendedCategoryColor.primary}\n $categorySecondary={blendedCategoryColor.secondary}\n >\n <ActivityHeader\n name={authorName}\n fullName={authorFullName}\n date={createdAt}\n isRef={isRef}\n activity={activity}\n // projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={onReferenceClick}\n onReferenceTooltip={setRefTooltip}\n children={undefined}\n />\n <Styled.Body className={clsx('comment-body', { isEditing })}>\n {!readOnly && (\n <Styled.Tools className={'tools'}>\n {isOwner && handleEditComment && (\n <Styled.ToolButton icon=\"edit_square\" onClick={handleEditComment} variant=\"text\" />\n )}\n <Styled.ToolButton\n icon=\"more_horiz\"\n ref={moreRef}\n onClick={(e) => {\n e.stopPropagation()\n toggleMenuOpen(menuId)\n }}\n className={isMenuOpen ? 'active' : ''}\n />\n </Styled.Tools>\n )}\n\n {!isEditing && !isGuest && categoryData && (\n <CategoryTag\n value={categoryData.name}\n color={categoryData.color}\n style={{\n top: -4,\n left: -4,\n }}\n isCompact\n data-tooltip={\n categoryNotFound ? 'Category not found. It may have been deleted.' : undefined\n }\n data-tooltip-delay={0}\n />\n )}\n\n {isEditing ? (\n <CommentInput\n initValue={body}\n initFiles={files}\n initCategory={categoryData?.name}\n data={activity.activityData}\n isEditing\n onClose={handleEditCancel}\n onSubmit={handleSave}\n isOpen={true}\n {...editProps}\n />\n ) : (\n <>\n <CommentWrapper>\n <ReactMarkdown\n remarkPlugins={[remarkGfm, emoji, remarkDirective, remarkDirectiveRehype]}\n urlTransform={(url) => url}\n components={{\n // a links\n // @ts-ignore\n a: (props) =>\n // @ts-ignore\n aTag(props, {\n entityId,\n projectName,\n projectInfo,\n onReferenceClick,\n onReferenceTooltip: setRefTooltip,\n activityId,\n categoryPrimary: categoryData?.color,\n categorySecondary: blendedCategoryColor.secondary,\n }),\n // checkbox inputs\n // @ts-ignore\n input: (props) => inputTag(props, { activity, onCheckChange }),\n // code syntax highlighting\n // eslint-disable-next-line\n // @ts-ignore\n code: (props) => codeTag(props),\n // @ts-ignore\n blockquote: (props) => blockquoteTag(props),\n // @ts-ignore\n tip: (props) => (\n <Styled.Tip>\n <Icon icon=\"info\" />\n {props.children}\n </Styled.Tip>\n ),\n // @ts-ignore\n status: (props) => {\n return (\n <ActivityStatus name={props.id} statuses={statuses}>\n {props.children}\n </ActivityStatus>\n )\n },\n }}\n >\n {body}\n </ReactMarkdown>\n </CommentWrapper>\n {/* file uploads */}\n {/* @ts-ignore */}\n <FilesGrid\n files={files}\n isCompact={files.length > 6}\n activityId={activityId}\n projectName={projectName}\n isDownloadable\n onExpand={onFileExpand}\n onAnnotationClick={onAnnotationClick}\n onRemove={undefined}\n />\n </>\n )}\n\n {!isEditing && (\n <div style={{ marginTop: '16px' }}>\n {mappedReactions && (\n <Reactions\n reactions={mappedReactions}\n changeHandler={reactionChangeHandler}\n readOnly={readOnly}\n category={categoryData && !isGuest ? categoryData.name : undefined}\n categoryPrimary={categoryData?.color}\n categorySecondary={blendedCategoryColor.secondary}\n categoryTertiary={blendedCategoryColor.primary}\n />\n )}\n </div>\n )}\n </Styled.Body>\n </Styled.Comment>\n\n <MenuContainer\n target={moreRef.current}\n id={menuId}\n align=\"right\"\n onClose={(e: any) => {\n e?.stopPropagation()\n toggleMenuOpen(false)\n }}\n >\n <ActivityCommentMenu\n onDelete={isOwner && onDelete ? deleteConfirmation : undefined}\n onEdit={isOwner && handleEditComment}\n activityId={activityId}\n onSelect={() => toggleMenuOpen(false)}\n projectName={projectName}\n />\n </MenuContainer>\n </>\n )\n}\n\nexport default ActivityComment\n"],"names":["ActivityComment","activity","onCheckChange","onDelete","onUpdate","projectInfo","editProps","projectName","entityType","onReferenceClick","onFileExpand","showOrigin","isHighlighted","readOnly","isSlideOut","statuses","userName","createReaction","deleteReaction","editingId","setEditingId","categories","isGuest","useFeedContext","moreRef","useRef","toggleMenuOpen","menuOpen","useMenuContext","categoryData","categoryNotFound","useMemo","foundCategory","cat","blendedCategoryColor","useBlendedCategoryColor","body","authorName","authorFullName","createdAt","referenceType","entityId","activityId","author","isOwner","files","origin","menuId","isMenuOpen","onGoToFrame","setHighlightedActivities","useDetailsPanelContext","handleEditComment","handleEditCancel","handleSave","value","data","isEditing","isRef","handleDelete","refs","getTextRefs","deleteConfirmation","confirmDelete","setRefTooltip","useReferenceTooltip","mappedReactions","mapGraphQLReactions","reactionChangeHandler","reaction","onAnnotationClick","useCallback","file","jsxs","Fragment","Styled.Comment","clsx","jsx","ActivityHeader","Styled.Body","Styled.Tools","Styled.ToolButton","CategoryTag","CommentInput","CommentWrapper","ReactMarkdown","remarkGfm","emoji","remarkDirective","remarkDirectiveRehype","url","props","aTag","inputTag","codeTag","blockquoteTag","Styled.Tip","Icon","ActivityStatus","FilesGrid","Reactions","MenuContainer","ActivityCommentMenu"],"mappings":"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"}
1
+ {"version":3,"file":"ActivityComment.cjs.js","sources":["../../../../../../../src/containers/Feed/components/ActivityComment/ActivityComment.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport emoji from 'remark-emoji'\nimport remarkGfm from 'remark-gfm'\nimport remarkDirective from 'remark-directive'\nimport remarkDirectiveRehype from 'remark-directive-rehype'\n\nimport CommentInput from '../CommentInput/CommentInput'\nimport Reactions from '../ReactionContainer/Reactions'\nimport { Reaction } from '../ReactionContainer/types'\nimport useReferenceTooltip from '../../hooks/useReferenceTooltip'\nimport FilesGrid, { FilesGridProps } from '../FilesGrid/FilesGrid'\n\nimport { getTextRefs } from '../CommentInput/quillToMarkdown'\nimport * as Styled from './ActivityComment.styled'\nimport CommentWrapper from './CommentWrapper'\nimport { aTag, blockquoteTag, codeTag, inputTag } from './ActivityMarkdownComponents'\nimport { mapGraphQLReactions } from './mappers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport ActivityStatus from '../ActivityStatus/ActivityStatus'\nimport { useFeedContext } from '../../context/FeedContext'\nimport { confirmDelete } from '../../../../util'\nimport ActivityHeader, { ActivityHeaderProps } from '../ActivityHeader/ActivityHeader'\nimport { MenuContainer } from '@shared/components'\nimport { useMenuContext } from '@shared/context'\nimport type { Status } from '../../../ProjectTreeTable/types/project'\nimport { SavedAnnotationMetadata } from '../../index'\nimport { useDetailsPanelContext } from '@shared/context'\nimport { useBlendedCategoryColor } from '../CommentInput/hooks/useBlendedCategoryColor'\nimport { CategoryTag } from '../ActivityCategorySelect/CategoryTag'\nimport ActivityCommentMenu from './ActivityCommentMenu'\n\ntype Props = {\n activity: any\n onCheckChange?: Function\n onDelete?: (activityId: string, entityId: string, refs: any) => Promise<void>\n onUpdate?: (value: any, files: any, refs?: any, data?: any) => Promise<void>\n projectInfo: any\n editProps?: {\n disabled: boolean\n isLoading: boolean\n }\n projectName: string\n entityType: string\n onReferenceClick?: ActivityHeaderProps['onReferenceClick']\n onFileExpand?: FilesGridProps['onExpand']\n showOrigin?: boolean\n isHighlighted?: boolean\n readOnly?: boolean\n isSlideOut?: boolean\n statuses: Status[]\n}\n\nconst ActivityComment = ({\n activity = {},\n onCheckChange,\n onDelete,\n onUpdate,\n projectInfo,\n editProps,\n projectName,\n entityType,\n onReferenceClick,\n onFileExpand,\n showOrigin,\n isHighlighted,\n readOnly,\n isSlideOut,\n statuses = [],\n}: Props) => {\n const { userName, createReaction, deleteReaction, editingId, setEditingId, categories, isGuest } =\n useFeedContext()\n\n const moreRef = useRef<HTMLButtonElement>(null)\n const { toggleMenuOpen, menuOpen } = useMenuContext()\n\n const { categoryData, categoryNotFound } = useMemo(() => {\n let categoryNotFound = false\n if (activity.activityData?.category) {\n const foundCategory = categories.find((cat) => cat.name === activity.activityData?.category)\n if (!foundCategory) {\n categoryNotFound = true\n }\n return {\n categoryData: foundCategory || {\n name: activity.activityData?.category,\n color: '#c5c5c5',\n },\n categoryNotFound,\n }\n } else {\n return {\n categoryData: null,\n categoryNotFound,\n }\n }\n }, [activity?.activityData?.category, categories])\n // Compute blended background color for category\n const blendedCategoryColor = useBlendedCategoryColor(categoryData?.color)\n\n let {\n body,\n authorName,\n authorFullName,\n createdAt,\n referenceType,\n entityId,\n activityId,\n author,\n isOwner,\n files = [],\n origin,\n } = activity\n if (!authorName) authorName = author?.name || ''\n if (!authorFullName) authorFullName = author?.fullName || authorName\n\n const menuId = `activity-comment-menu-${activityId}-${isSlideOut ? 'slideout' : 'normal'}`\n const isMenuOpen = menuOpen === menuId\n\n const { onGoToFrame, setHighlightedActivities } = useDetailsPanelContext()\n\n const handleEditComment = () => {\n setEditingId(activityId)\n }\n\n const handleEditCancel = () => {\n // close the edit comment\n setEditingId(null)\n }\n\n const handleSave = async (value: any, files: any, data?: any) => {\n await onUpdate?.(value, files, undefined, data)\n setEditingId(null)\n }\n\n const isEditing = editingId === activityId\n\n const isRef = referenceType !== 'origin' || showOrigin\n\n const handleDelete = async () => {\n const refs = getTextRefs(body)\n\n // if the comment is a reference, (it's origin is not the entity)\n // we need to delete the reference from the origin as well\n // add it to the refs to delete\n if (isRef && origin) {\n refs.push({ id: origin.id, type: origin.type })\n }\n\n // note: body is used to match other refs to delete\n onDelete && (await onDelete(activityId, entityId, refs))\n }\n\n const deleteConfirmation = () => {\n confirmDelete({\n title: 'Delete comment',\n message: 'Are you sure you want to delete this comment?',\n accept: async () => {\n await handleDelete()\n },\n })\n }\n\n const [, setRefTooltip] = useReferenceTooltip()\n\n const mappedReactions = useMemo(\n () => mapGraphQLReactions(activity.reactions, userName),\n [[...(activity.reactions || [])]],\n )\n\n const reactionChangeHandler = (reaction: Reaction) => {\n if (reaction.isActive) {\n createReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n createReactionModel: {\n reaction: reaction.type,\n },\n })\n } else {\n deleteReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n reaction: reaction.type,\n })\n }\n }\n\n const onAnnotationClick = useCallback(\n (file: any) => {\n if (!file.annotation) return\n // annotation frame numbers are 1-based\n onGoToFrame?.((file.annotation as SavedAnnotationMetadata).range[0])\n setHighlightedActivities([activityId])\n },\n [onGoToFrame],\n )\n\n return (\n <>\n <Styled.Comment\n className={clsx('comment', {\n isOwner,\n isEditing,\n isHighlighted,\n category: !!categoryData && !isGuest,\n menuOpen: isMenuOpen,\n })}\n id={activityId}\n $categoryPrimary={categoryData?.color}\n $categoryTertiary={blendedCategoryColor.primary}\n $categorySecondary={blendedCategoryColor.secondary}\n >\n <ActivityHeader\n name={authorName}\n fullName={authorFullName}\n date={createdAt}\n isRef={isRef}\n activity={activity}\n // projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={onReferenceClick}\n onReferenceTooltip={setRefTooltip}\n children={undefined}\n />\n <Styled.Body className={clsx('comment-body', { isEditing })}>\n {!readOnly && (\n <Styled.Tools className={'tools'}>\n {isOwner && handleEditComment && (\n <Styled.ToolButton icon=\"edit_square\" onClick={handleEditComment} variant=\"text\" />\n )}\n <Styled.ToolButton\n icon=\"more_horiz\"\n ref={moreRef}\n onClick={(e) => {\n e.stopPropagation()\n toggleMenuOpen(menuId)\n }}\n className={isMenuOpen ? 'active' : ''}\n />\n </Styled.Tools>\n )}\n\n {!isEditing && !isGuest && categoryData && (\n <CategoryTag\n value={categoryData.name}\n color={categoryData.color}\n style={{\n top: -4,\n left: -4,\n }}\n isCompact\n data-tooltip={\n categoryNotFound ? 'Category not found. It may have been deleted.' : undefined\n }\n data-tooltip-delay={0}\n />\n )}\n\n {isEditing ? (\n <CommentInput\n initValue={body}\n initFiles={files}\n initCategory={categoryData?.name}\n data={activity.activityData}\n isEditing\n onClose={handleEditCancel}\n onSubmit={handleSave}\n isOpen={true}\n {...editProps}\n />\n ) : (\n <>\n <CommentWrapper>\n <ReactMarkdown\n remarkPlugins={[remarkGfm, emoji, remarkDirective, remarkDirectiveRehype]}\n urlTransform={(url) => url}\n components={{\n // a links\n // @ts-ignore\n a: (props) =>\n // @ts-ignore\n aTag(props, {\n entityId,\n projectName,\n projectInfo,\n onReferenceClick,\n onReferenceTooltip: setRefTooltip,\n activityId,\n categoryPrimary: categoryData?.color,\n categorySecondary: blendedCategoryColor.secondary,\n }),\n // checkbox inputs\n // @ts-ignore\n input: (props) => inputTag(props, { activity, onCheckChange }),\n // code syntax highlighting\n // eslint-disable-next-line\n // @ts-ignore\n code: (props) => codeTag(props),\n // @ts-ignore\n blockquote: (props) => blockquoteTag(props),\n // @ts-ignore\n tip: (props) => (\n <Styled.Tip>\n <Icon icon=\"info\" />\n {props.children}\n </Styled.Tip>\n ),\n // @ts-ignore\n status: (props) => {\n return (\n <ActivityStatus name={props.id} statuses={statuses}>\n {props.children}\n </ActivityStatus>\n )\n },\n }}\n >\n {body}\n </ReactMarkdown>\n </CommentWrapper>\n {/* file uploads */}\n {/* @ts-ignore */}\n <FilesGrid\n files={files}\n isCompact={files.length > 6}\n activityId={activityId}\n projectName={projectName}\n isDownloadable\n onExpand={onFileExpand}\n onAnnotationClick={onAnnotationClick}\n onRemove={undefined}\n />\n </>\n )}\n\n {!isEditing && (\n <div style={{ marginTop: '16px' }}>\n {mappedReactions && (\n <Reactions\n reactions={mappedReactions}\n changeHandler={reactionChangeHandler}\n readOnly={readOnly}\n category={categoryData && !isGuest ? categoryData.name : undefined}\n categoryPrimary={categoryData?.color}\n categorySecondary={blendedCategoryColor.secondary}\n categoryTertiary={blendedCategoryColor.primary}\n />\n )}\n </div>\n )}\n </Styled.Body>\n </Styled.Comment>\n\n <MenuContainer\n target={moreRef.current}\n id={menuId}\n align=\"right\"\n onClose={(e: any) => {\n e?.stopPropagation()\n toggleMenuOpen(false)\n }}\n >\n <ActivityCommentMenu\n onDelete={isOwner && onDelete ? deleteConfirmation : undefined}\n onEdit={isOwner && handleEditComment}\n activityId={activityId}\n onSelect={() => toggleMenuOpen(false)}\n projectName={projectName}\n />\n </MenuContainer>\n </>\n )\n}\n\nexport default ActivityComment\n"],"names":["ActivityComment","activity","onCheckChange","onDelete","onUpdate","projectInfo","editProps","projectName","entityType","onReferenceClick","onFileExpand","showOrigin","isHighlighted","readOnly","isSlideOut","statuses","userName","createReaction","deleteReaction","editingId","setEditingId","categories","isGuest","useFeedContext","moreRef","useRef","toggleMenuOpen","menuOpen","useMenuContext","categoryData","categoryNotFound","useMemo","foundCategory","cat","blendedCategoryColor","useBlendedCategoryColor","body","authorName","authorFullName","createdAt","referenceType","entityId","activityId","author","isOwner","files","origin","menuId","isMenuOpen","onGoToFrame","setHighlightedActivities","useDetailsPanelContext","handleEditComment","handleEditCancel","handleSave","value","data","isEditing","isRef","handleDelete","refs","getTextRefs","deleteConfirmation","confirmDelete","setRefTooltip","useReferenceTooltip","mappedReactions","mapGraphQLReactions","reactionChangeHandler","reaction","onAnnotationClick","useCallback","file","jsxs","Fragment","Styled.Comment","clsx","jsx","ActivityHeader","Styled.Body","Styled.Tools","Styled.ToolButton","CategoryTag","CommentInput","CommentWrapper","ReactMarkdown","remarkGfm","emoji","remarkDirective","remarkDirectiveRehype","url","props","aTag","inputTag","codeTag","blockquoteTag","Styled.Tip","Icon","ActivityStatus","FilesGrid","Reactions","MenuContainer","ActivityCommentMenu"],"mappings":"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"}
@@ -195,7 +195,6 @@ import "../../../ProjectTreeTable/widgets/LoadMoreWidget.es.js";
195
195
  import "../../../ProjectTreeTable/components/HeaderActionButton.es.js";
196
196
  import "../../../ProjectTreeTable/components/ColumnHeaderMenu.es.js";
197
197
  import "../../../EntityPickerDialog/EntityPickerDialog.es.js";
198
- import "react-router-dom";
199
198
  import "../../../DetailsPanel/DetailsPanel.styled.es.js";
200
199
  import "../../../DetailsPanel/FeedFilters/FeedFilters.styled.es.js";
201
200
  import "../../../DetailsPanel/DetailsPanelHeader/DetailsPanelHeader.styled.es.js";
@@ -250,7 +249,7 @@ import "../../../../components/LegacyBadge/LegacyBadge.es.js";
250
249
  import "../../../../components/Menu/Menu.styled.es.js";
251
250
  import "../../../../components/Menu/MenuItem.es.js";
252
251
  import { MenuContainer as Ho } from "../../../../components/Menu/MenuContainer.es.js";
253
- const Rp = ({
252
+ const Tp = ({
254
253
  activity: m = {},
255
254
  onCheckChange: O,
256
255
  onDelete: l,
@@ -508,6 +507,6 @@ const Rp = ({
508
507
  ] });
509
508
  };
510
509
  export {
511
- Rp as default
510
+ Tp as default
512
511
  };
513
512
  //# sourceMappingURL=ActivityComment.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityComment.es.js","sources":["../../../../../../../src/containers/Feed/components/ActivityComment/ActivityComment.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport emoji from 'remark-emoji'\nimport remarkGfm from 'remark-gfm'\nimport remarkDirective from 'remark-directive'\nimport remarkDirectiveRehype from 'remark-directive-rehype'\n\nimport CommentInput from '../CommentInput/CommentInput'\nimport Reactions from '../ReactionContainer/Reactions'\nimport { Reaction } from '../ReactionContainer/types'\nimport useReferenceTooltip from '../../hooks/useReferenceTooltip'\nimport FilesGrid, { FilesGridProps } from '../FilesGrid/FilesGrid'\n\nimport { getTextRefs } from '../CommentInput/quillToMarkdown'\nimport * as Styled from './ActivityComment.styled'\nimport CommentWrapper from './CommentWrapper'\nimport { aTag, blockquoteTag, codeTag, inputTag } from './ActivityMarkdownComponents'\nimport { mapGraphQLReactions } from './mappers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport ActivityStatus from '../ActivityStatus/ActivityStatus'\nimport { useFeedContext } from '../../context/FeedContext'\nimport { confirmDelete } from '../../../../util'\nimport ActivityHeader, { ActivityHeaderProps } from '../ActivityHeader/ActivityHeader'\nimport { MenuContainer } from '@shared/components'\nimport { useMenuContext } from '@shared/context'\nimport type { Status } from '../../../ProjectTreeTable/types/project'\nimport { SavedAnnotationMetadata } from '../../index'\nimport { useDetailsPanelContext } from '@shared/context'\nimport { useBlendedCategoryColor } from '../CommentInput/hooks/useBlendedCategoryColor'\nimport { CategoryTag } from '../ActivityCategorySelect/CategoryTag'\nimport ActivityCommentMenu from './ActivityCommentMenu'\n\ntype Props = {\n activity: any\n onCheckChange?: Function\n onDelete?: (activityId: string, entityId: string, refs: any) => Promise<void>\n onUpdate?: (value: any, files: any, refs?: any, data?: any) => Promise<void>\n projectInfo: any\n editProps?: {\n disabled: boolean\n isLoading: boolean\n }\n projectName: string\n entityType: string\n onReferenceClick?: ActivityHeaderProps['onReferenceClick']\n onFileExpand?: FilesGridProps['onExpand']\n showOrigin?: boolean\n isHighlighted?: boolean\n readOnly?: boolean\n isSlideOut?: boolean\n statuses: Status[]\n}\n\nconst ActivityComment = ({\n activity = {},\n onCheckChange,\n onDelete,\n onUpdate,\n projectInfo,\n editProps,\n projectName,\n entityType,\n onReferenceClick,\n onFileExpand,\n showOrigin,\n isHighlighted,\n readOnly,\n isSlideOut,\n statuses = [],\n}: Props) => {\n const { userName, createReaction, deleteReaction, editingId, setEditingId, categories, isGuest } =\n useFeedContext()\n\n const moreRef = useRef<HTMLButtonElement>(null)\n const { toggleMenuOpen, menuOpen } = useMenuContext()\n\n const { categoryData, categoryNotFound } = useMemo(() => {\n let categoryNotFound = false\n if (activity.activityData?.category) {\n const foundCategory = categories.find((cat) => cat.name === activity.activityData?.category)\n if (!foundCategory) {\n categoryNotFound = true\n }\n return {\n categoryData: foundCategory || {\n name: activity.activityData?.category,\n color: '#c5c5c5',\n },\n categoryNotFound,\n }\n } else {\n return {\n categoryData: null,\n categoryNotFound,\n }\n }\n }, [activity?.activityData?.category, categories])\n // Compute blended background color for category\n const blendedCategoryColor = useBlendedCategoryColor(categoryData?.color)\n\n let {\n body,\n authorName,\n authorFullName,\n createdAt,\n referenceType,\n entityId,\n activityId,\n author,\n isOwner,\n files = [],\n origin,\n } = activity\n if (!authorName) authorName = author?.name || ''\n if (!authorFullName) authorFullName = author?.fullName || authorName\n\n const menuId = `activity-comment-menu-${activityId}-${isSlideOut ? 'slideout' : 'normal'}`\n const isMenuOpen = menuOpen === menuId\n\n const { onGoToFrame, setHighlightedActivities } = useDetailsPanelContext()\n\n const handleEditComment = () => {\n setEditingId(activityId)\n }\n\n const handleEditCancel = () => {\n // close the edit comment\n setEditingId(null)\n }\n\n const handleSave = async (value: any, files: any, data?: any) => {\n await onUpdate?.(value, files, undefined, data)\n setEditingId(null)\n }\n\n const isEditing = editingId === activityId\n\n const isRef = referenceType !== 'origin' || showOrigin\n\n const handleDelete = async () => {\n const refs = getTextRefs(body)\n\n // if the comment is a reference, (it's origin is not the entity)\n // we need to delete the reference from the origin as well\n // add it to the refs to delete\n if (isRef && origin) {\n refs.push({ id: origin.id, type: origin.type })\n }\n\n // note: body is used to match other refs to delete\n onDelete && (await onDelete(activityId, entityId, refs))\n }\n\n const deleteConfirmation = () => {\n confirmDelete({\n title: 'Delete comment',\n message: 'Are you sure you want to delete this comment?',\n accept: async () => {\n await handleDelete()\n },\n })\n }\n\n const [, setRefTooltip] = useReferenceTooltip()\n\n const mappedReactions = useMemo(\n () => mapGraphQLReactions(activity.reactions, userName),\n [[...(activity.reactions || [])]],\n )\n\n const reactionChangeHandler = (reaction: Reaction) => {\n if (reaction.isActive) {\n createReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n createReactionModel: {\n reaction: reaction.type,\n },\n })\n } else {\n deleteReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n reaction: reaction.type,\n })\n }\n }\n\n const onAnnotationClick = useCallback(\n (file: any) => {\n if (!file.annotation) return\n // annotation frame numbers are 1-based\n onGoToFrame?.((file.annotation as SavedAnnotationMetadata).range[0])\n setHighlightedActivities([activityId])\n },\n [onGoToFrame],\n )\n\n return (\n <>\n <Styled.Comment\n className={clsx('comment', {\n isOwner,\n isEditing,\n isHighlighted,\n category: !!categoryData && !isGuest,\n menuOpen: isMenuOpen,\n })}\n id={activityId}\n $categoryPrimary={categoryData?.color}\n $categoryTertiary={blendedCategoryColor.primary}\n $categorySecondary={blendedCategoryColor.secondary}\n >\n <ActivityHeader\n name={authorName}\n fullName={authorFullName}\n date={createdAt}\n isRef={isRef}\n activity={activity}\n // projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={onReferenceClick}\n onReferenceTooltip={setRefTooltip}\n children={undefined}\n />\n <Styled.Body className={clsx('comment-body', { isEditing })}>\n {!readOnly && (\n <Styled.Tools className={'tools'}>\n {isOwner && handleEditComment && (\n <Styled.ToolButton icon=\"edit_square\" onClick={handleEditComment} variant=\"text\" />\n )}\n <Styled.ToolButton\n icon=\"more_horiz\"\n ref={moreRef}\n onClick={(e) => {\n e.stopPropagation()\n toggleMenuOpen(menuId)\n }}\n className={isMenuOpen ? 'active' : ''}\n />\n </Styled.Tools>\n )}\n\n {!isEditing && !isGuest && categoryData && (\n <CategoryTag\n value={categoryData.name}\n color={categoryData.color}\n style={{\n top: -4,\n left: -4,\n }}\n isCompact\n data-tooltip={\n categoryNotFound ? 'Category not found. It may have been deleted.' : undefined\n }\n data-tooltip-delay={0}\n />\n )}\n\n {isEditing ? (\n <CommentInput\n initValue={body}\n initFiles={files}\n initCategory={categoryData?.name}\n data={activity.activityData}\n isEditing\n onClose={handleEditCancel}\n onSubmit={handleSave}\n isOpen={true}\n {...editProps}\n />\n ) : (\n <>\n <CommentWrapper>\n <ReactMarkdown\n remarkPlugins={[remarkGfm, emoji, remarkDirective, remarkDirectiveRehype]}\n urlTransform={(url) => url}\n components={{\n // a links\n // @ts-ignore\n a: (props) =>\n // @ts-ignore\n aTag(props, {\n entityId,\n projectName,\n projectInfo,\n onReferenceClick,\n onReferenceTooltip: setRefTooltip,\n activityId,\n categoryPrimary: categoryData?.color,\n categorySecondary: blendedCategoryColor.secondary,\n }),\n // checkbox inputs\n // @ts-ignore\n input: (props) => inputTag(props, { activity, onCheckChange }),\n // code syntax highlighting\n // eslint-disable-next-line\n // @ts-ignore\n code: (props) => codeTag(props),\n // @ts-ignore\n blockquote: (props) => blockquoteTag(props),\n // @ts-ignore\n tip: (props) => (\n <Styled.Tip>\n <Icon icon=\"info\" />\n {props.children}\n </Styled.Tip>\n ),\n // @ts-ignore\n status: (props) => {\n return (\n <ActivityStatus name={props.id} statuses={statuses}>\n {props.children}\n </ActivityStatus>\n )\n },\n }}\n >\n {body}\n </ReactMarkdown>\n </CommentWrapper>\n {/* file uploads */}\n {/* @ts-ignore */}\n <FilesGrid\n files={files}\n isCompact={files.length > 6}\n activityId={activityId}\n projectName={projectName}\n isDownloadable\n onExpand={onFileExpand}\n onAnnotationClick={onAnnotationClick}\n onRemove={undefined}\n />\n </>\n )}\n\n {!isEditing && (\n <div style={{ marginTop: '16px' }}>\n {mappedReactions && (\n <Reactions\n reactions={mappedReactions}\n changeHandler={reactionChangeHandler}\n readOnly={readOnly}\n category={categoryData && !isGuest ? categoryData.name : undefined}\n categoryPrimary={categoryData?.color}\n categorySecondary={blendedCategoryColor.secondary}\n categoryTertiary={blendedCategoryColor.primary}\n />\n )}\n </div>\n )}\n </Styled.Body>\n </Styled.Comment>\n\n <MenuContainer\n target={moreRef.current}\n id={menuId}\n align=\"right\"\n onClose={(e: any) => {\n e?.stopPropagation()\n toggleMenuOpen(false)\n }}\n >\n <ActivityCommentMenu\n onDelete={isOwner && onDelete ? deleteConfirmation : undefined}\n onEdit={isOwner && handleEditComment}\n activityId={activityId}\n onSelect={() => toggleMenuOpen(false)}\n projectName={projectName}\n />\n </MenuContainer>\n </>\n )\n}\n\nexport default ActivityComment\n"],"names":["ActivityComment","activity","onCheckChange","onDelete","onUpdate","projectInfo","editProps","projectName","entityType","onReferenceClick","onFileExpand","showOrigin","isHighlighted","readOnly","isSlideOut","statuses","userName","createReaction","deleteReaction","editingId","setEditingId","categories","isGuest","useFeedContext","moreRef","useRef","toggleMenuOpen","menuOpen","useMenuContext","categoryData","categoryNotFound","useMemo","foundCategory","cat","blendedCategoryColor","useBlendedCategoryColor","body","authorName","authorFullName","createdAt","referenceType","entityId","activityId","author","isOwner","files","origin","menuId","isMenuOpen","onGoToFrame","setHighlightedActivities","useDetailsPanelContext","handleEditComment","handleEditCancel","handleSave","value","data","isEditing","isRef","handleDelete","refs","getTextRefs","deleteConfirmation","confirmDelete","setRefTooltip","useReferenceTooltip","mappedReactions","mapGraphQLReactions","reactionChangeHandler","reaction","onAnnotationClick","useCallback","file","jsxs","Fragment","Styled.Comment","clsx","jsx","ActivityHeader","Styled.Body","Styled.Tools","Styled.ToolButton","e","CategoryTag","CommentInput","CommentWrapper","ReactMarkdown","remarkGfm","emoji","remarkDirective","remarkDirectiveRehype","url","props","aTag","inputTag","codeTag","blockquoteTag","Styled.Tip","Icon","ActivityStatus","FilesGrid","Reactions","MenuContainer","ActivityCommentMenu"],"mappings":"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"}
1
+ {"version":3,"file":"ActivityComment.es.js","sources":["../../../../../../../src/containers/Feed/components/ActivityComment/ActivityComment.tsx"],"sourcesContent":["import clsx from 'clsx'\nimport { useCallback, useMemo, useRef } from 'react'\nimport ReactMarkdown from 'react-markdown'\nimport emoji from 'remark-emoji'\nimport remarkGfm from 'remark-gfm'\nimport remarkDirective from 'remark-directive'\nimport remarkDirectiveRehype from 'remark-directive-rehype'\n\nimport CommentInput from '../CommentInput/CommentInput'\nimport Reactions from '../ReactionContainer/Reactions'\nimport { Reaction } from '../ReactionContainer/types'\nimport useReferenceTooltip from '../../hooks/useReferenceTooltip'\nimport FilesGrid, { FilesGridProps } from '../FilesGrid/FilesGrid'\n\nimport { getTextRefs } from '../CommentInput/quillToMarkdown'\nimport * as Styled from './ActivityComment.styled'\nimport CommentWrapper from './CommentWrapper'\nimport { aTag, blockquoteTag, codeTag, inputTag } from './ActivityMarkdownComponents'\nimport { mapGraphQLReactions } from './mappers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport ActivityStatus from '../ActivityStatus/ActivityStatus'\nimport { useFeedContext } from '../../context/FeedContext'\nimport { confirmDelete } from '../../../../util'\nimport ActivityHeader, { ActivityHeaderProps } from '../ActivityHeader/ActivityHeader'\nimport { MenuContainer } from '@shared/components'\nimport { useMenuContext } from '@shared/context'\nimport type { Status } from '../../../ProjectTreeTable/types/project'\nimport { SavedAnnotationMetadata } from '../../index'\nimport { useDetailsPanelContext } from '@shared/context'\nimport { useBlendedCategoryColor } from '../CommentInput/hooks/useBlendedCategoryColor'\nimport { CategoryTag } from '../ActivityCategorySelect/CategoryTag'\nimport ActivityCommentMenu from './ActivityCommentMenu'\n\ntype Props = {\n activity: any\n onCheckChange?: Function\n onDelete?: (activityId: string, entityId: string, refs: any) => Promise<void>\n onUpdate?: (value: any, files: any, refs?: any, data?: any) => Promise<void>\n projectInfo: any\n editProps?: {\n disabled: boolean\n isLoading: boolean\n }\n projectName: string\n entityType: string\n onReferenceClick?: ActivityHeaderProps['onReferenceClick']\n onFileExpand?: FilesGridProps['onExpand']\n showOrigin?: boolean\n isHighlighted?: boolean\n readOnly?: boolean\n isSlideOut?: boolean\n statuses: Status[]\n}\n\nconst ActivityComment = ({\n activity = {},\n onCheckChange,\n onDelete,\n onUpdate,\n projectInfo,\n editProps,\n projectName,\n entityType,\n onReferenceClick,\n onFileExpand,\n showOrigin,\n isHighlighted,\n readOnly,\n isSlideOut,\n statuses = [],\n}: Props) => {\n const { userName, createReaction, deleteReaction, editingId, setEditingId, categories, isGuest } =\n useFeedContext()\n\n const moreRef = useRef<HTMLButtonElement>(null)\n const { toggleMenuOpen, menuOpen } = useMenuContext()\n\n const { categoryData, categoryNotFound } = useMemo(() => {\n let categoryNotFound = false\n if (activity.activityData?.category) {\n const foundCategory = categories.find((cat) => cat.name === activity.activityData?.category)\n if (!foundCategory) {\n categoryNotFound = true\n }\n return {\n categoryData: foundCategory || {\n name: activity.activityData?.category,\n color: '#c5c5c5',\n },\n categoryNotFound,\n }\n } else {\n return {\n categoryData: null,\n categoryNotFound,\n }\n }\n }, [activity?.activityData?.category, categories])\n // Compute blended background color for category\n const blendedCategoryColor = useBlendedCategoryColor(categoryData?.color)\n\n let {\n body,\n authorName,\n authorFullName,\n createdAt,\n referenceType,\n entityId,\n activityId,\n author,\n isOwner,\n files = [],\n origin,\n } = activity\n if (!authorName) authorName = author?.name || ''\n if (!authorFullName) authorFullName = author?.fullName || authorName\n\n const menuId = `activity-comment-menu-${activityId}-${isSlideOut ? 'slideout' : 'normal'}`\n const isMenuOpen = menuOpen === menuId\n\n const { onGoToFrame, setHighlightedActivities } = useDetailsPanelContext()\n\n const handleEditComment = () => {\n setEditingId(activityId)\n }\n\n const handleEditCancel = () => {\n // close the edit comment\n setEditingId(null)\n }\n\n const handleSave = async (value: any, files: any, data?: any) => {\n await onUpdate?.(value, files, undefined, data)\n setEditingId(null)\n }\n\n const isEditing = editingId === activityId\n\n const isRef = referenceType !== 'origin' || showOrigin\n\n const handleDelete = async () => {\n const refs = getTextRefs(body)\n\n // if the comment is a reference, (it's origin is not the entity)\n // we need to delete the reference from the origin as well\n // add it to the refs to delete\n if (isRef && origin) {\n refs.push({ id: origin.id, type: origin.type })\n }\n\n // note: body is used to match other refs to delete\n onDelete && (await onDelete(activityId, entityId, refs))\n }\n\n const deleteConfirmation = () => {\n confirmDelete({\n title: 'Delete comment',\n message: 'Are you sure you want to delete this comment?',\n accept: async () => {\n await handleDelete()\n },\n })\n }\n\n const [, setRefTooltip] = useReferenceTooltip()\n\n const mappedReactions = useMemo(\n () => mapGraphQLReactions(activity.reactions, userName),\n [[...(activity.reactions || [])]],\n )\n\n const reactionChangeHandler = (reaction: Reaction) => {\n if (reaction.isActive) {\n createReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n createReactionModel: {\n reaction: reaction.type,\n },\n })\n } else {\n deleteReaction({\n projectName: projectName,\n // @ts-ignore exposed endpoint doesn't need the username, we still need to pass it for the optimistic update\n userName: userName,\n activityId: activityId,\n reaction: reaction.type,\n })\n }\n }\n\n const onAnnotationClick = useCallback(\n (file: any) => {\n if (!file.annotation) return\n // annotation frame numbers are 1-based\n onGoToFrame?.((file.annotation as SavedAnnotationMetadata).range[0])\n setHighlightedActivities([activityId])\n },\n [onGoToFrame],\n )\n\n return (\n <>\n <Styled.Comment\n className={clsx('comment', {\n isOwner,\n isEditing,\n isHighlighted,\n category: !!categoryData && !isGuest,\n menuOpen: isMenuOpen,\n })}\n id={activityId}\n $categoryPrimary={categoryData?.color}\n $categoryTertiary={blendedCategoryColor.primary}\n $categorySecondary={blendedCategoryColor.secondary}\n >\n <ActivityHeader\n name={authorName}\n fullName={authorFullName}\n date={createdAt}\n isRef={isRef}\n activity={activity}\n // projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={onReferenceClick}\n onReferenceTooltip={setRefTooltip}\n children={undefined}\n />\n <Styled.Body className={clsx('comment-body', { isEditing })}>\n {!readOnly && (\n <Styled.Tools className={'tools'}>\n {isOwner && handleEditComment && (\n <Styled.ToolButton icon=\"edit_square\" onClick={handleEditComment} variant=\"text\" />\n )}\n <Styled.ToolButton\n icon=\"more_horiz\"\n ref={moreRef}\n onClick={(e) => {\n e.stopPropagation()\n toggleMenuOpen(menuId)\n }}\n className={isMenuOpen ? 'active' : ''}\n />\n </Styled.Tools>\n )}\n\n {!isEditing && !isGuest && categoryData && (\n <CategoryTag\n value={categoryData.name}\n color={categoryData.color}\n style={{\n top: -4,\n left: -4,\n }}\n isCompact\n data-tooltip={\n categoryNotFound ? 'Category not found. It may have been deleted.' : undefined\n }\n data-tooltip-delay={0}\n />\n )}\n\n {isEditing ? (\n <CommentInput\n initValue={body}\n initFiles={files}\n initCategory={categoryData?.name}\n data={activity.activityData}\n isEditing\n onClose={handleEditCancel}\n onSubmit={handleSave}\n isOpen={true}\n {...editProps}\n />\n ) : (\n <>\n <CommentWrapper>\n <ReactMarkdown\n remarkPlugins={[remarkGfm, emoji, remarkDirective, remarkDirectiveRehype]}\n urlTransform={(url) => url}\n components={{\n // a links\n // @ts-ignore\n a: (props) =>\n // @ts-ignore\n aTag(props, {\n entityId,\n projectName,\n projectInfo,\n onReferenceClick,\n onReferenceTooltip: setRefTooltip,\n activityId,\n categoryPrimary: categoryData?.color,\n categorySecondary: blendedCategoryColor.secondary,\n }),\n // checkbox inputs\n // @ts-ignore\n input: (props) => inputTag(props, { activity, onCheckChange }),\n // code syntax highlighting\n // eslint-disable-next-line\n // @ts-ignore\n code: (props) => codeTag(props),\n // @ts-ignore\n blockquote: (props) => blockquoteTag(props),\n // @ts-ignore\n tip: (props) => (\n <Styled.Tip>\n <Icon icon=\"info\" />\n {props.children}\n </Styled.Tip>\n ),\n // @ts-ignore\n status: (props) => {\n return (\n <ActivityStatus name={props.id} statuses={statuses}>\n {props.children}\n </ActivityStatus>\n )\n },\n }}\n >\n {body}\n </ReactMarkdown>\n </CommentWrapper>\n {/* file uploads */}\n {/* @ts-ignore */}\n <FilesGrid\n files={files}\n isCompact={files.length > 6}\n activityId={activityId}\n projectName={projectName}\n isDownloadable\n onExpand={onFileExpand}\n onAnnotationClick={onAnnotationClick}\n onRemove={undefined}\n />\n </>\n )}\n\n {!isEditing && (\n <div style={{ marginTop: '16px' }}>\n {mappedReactions && (\n <Reactions\n reactions={mappedReactions}\n changeHandler={reactionChangeHandler}\n readOnly={readOnly}\n category={categoryData && !isGuest ? categoryData.name : undefined}\n categoryPrimary={categoryData?.color}\n categorySecondary={blendedCategoryColor.secondary}\n categoryTertiary={blendedCategoryColor.primary}\n />\n )}\n </div>\n )}\n </Styled.Body>\n </Styled.Comment>\n\n <MenuContainer\n target={moreRef.current}\n id={menuId}\n align=\"right\"\n onClose={(e: any) => {\n e?.stopPropagation()\n toggleMenuOpen(false)\n }}\n >\n <ActivityCommentMenu\n onDelete={isOwner && onDelete ? deleteConfirmation : undefined}\n onEdit={isOwner && handleEditComment}\n activityId={activityId}\n onSelect={() => toggleMenuOpen(false)}\n projectName={projectName}\n />\n </MenuContainer>\n </>\n )\n}\n\nexport default ActivityComment\n"],"names":["ActivityComment","activity","onCheckChange","onDelete","onUpdate","projectInfo","editProps","projectName","entityType","onReferenceClick","onFileExpand","showOrigin","isHighlighted","readOnly","isSlideOut","statuses","userName","createReaction","deleteReaction","editingId","setEditingId","categories","isGuest","useFeedContext","moreRef","useRef","toggleMenuOpen","menuOpen","useMenuContext","categoryData","categoryNotFound","useMemo","foundCategory","cat","blendedCategoryColor","useBlendedCategoryColor","body","authorName","authorFullName","createdAt","referenceType","entityId","activityId","author","isOwner","files","origin","menuId","isMenuOpen","onGoToFrame","setHighlightedActivities","useDetailsPanelContext","handleEditComment","handleEditCancel","handleSave","value","data","isEditing","isRef","handleDelete","refs","getTextRefs","deleteConfirmation","confirmDelete","setRefTooltip","useReferenceTooltip","mappedReactions","mapGraphQLReactions","reactionChangeHandler","reaction","onAnnotationClick","useCallback","file","jsxs","Fragment","Styled.Comment","clsx","jsx","ActivityHeader","Styled.Body","Styled.Tools","Styled.ToolButton","e","CategoryTag","CommentInput","CommentWrapper","ReactMarkdown","remarkGfm","emoji","remarkDirective","remarkDirectiveRehype","url","props","aTag","inputTag","codeTag","blockquoteTag","Styled.Tip","Icon","ActivityStatus","FilesGrid","Reactions","MenuContainer","ActivityCommentMenu"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const ee=require("../../../_virtual/jsx-runtime.cjs.js"),e=require("react"),F=require("../hooks/useLocalStorage.cjs.js");require("./RemoteModulesContext.cjs.js");require("../../../_virtual/runtime.cjs.js");require("../../../_virtual/semver.cjs.js");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/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("lodash");require("react-toastify");require("./ThumbnailUploaderContext.cjs.js");require("./SettingsPanelContext.cjs.js");require("./pip/PiPProvider.cjs.js");require("react-dom");require("./pip/PiPWrapper.cjs.js");require("./AddonProjectContext.cjs.js");require("./AddonContext.cjs.js");const re=require("./PowerpackContext.cjs.js");require("./MoveEntityContext.cjs.js");require("./MenuContext.cjs.js");require("./WebsocketContext.cjs.js");const te=require("./GlobalContext.cjs.js");require("./ProjectContext.cjs.js");require("./ProjectFoldersContext.cjs.js");const ie=require("./UriContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js");const L=require("react-router-dom"),I=e.createContext(void 0),ue=({children:t,defaultTab:q="activity",hasLicense:P,debug:u={},...l})=>{const{user:n}=te.useGlobalContext(),v="isDeveloperMode"in u?u.isDeveloperMode:n?.attrib?.developerMode??!1,b="isGuest"in u?u.isGuest:n?.data?.isGuest,{powerLicense:f,setPowerpackDialog:p}=re.usePowerpack(),h="hasLicense"in u?u.hasLicense:!!f||P,[i,D]=e.useState({}),[G,R]=e.useState([]),U=e.useCallback(r=>i[r]?i[r]:!1,[i]),M=e.useCallback((r,S)=>{const a={...i};a[r]=S,D(a)},[i]),[o,A]=F.useLocalStorage("details/tabs-by-scope",{}),N=e.useCallback(r=>o[r]?o[r]:q,[o,q]),[x,m]=e.useState(null),H=e.useCallback(r=>{m(r)},[]),k=e.useCallback(()=>{m(null),x&&g([])},[]);e.useEffect(()=>{k()},[L.useLocation().pathname]);const[z,w]=e.useState(null),J=e.useCallback(r=>{w(r)},[]),K=e.useCallback(()=>{w(null)},[]),[Q,C]=e.useState(null),[V,g]=e.useState([]),{uriType:W,uri:X,entity:d,getUriEntities:Y}=ie.useURIContext(),[y]=L.useSearchParams();e.useEffect(()=>{if(W==="entity"&&d&&d.entityType!=="product"){Y().then(c=>{if(c.length===0)return;const T=c.find($=>$.uri===X),s=T?.entities?.[0];if(!T||!s)return;const j=s?.projectName||d.projectName||"",E=s.representationId||s.versionId||s.productId||s.taskId||s.folderId;if(!j||!E)return;const _={entityType:d.entityType,entities:[{id:E,projectName:j}],source:"uri"};C(_)}).catch(c=>{console.warn("Failed to get URI entities:",c)});return}const r=y.get("project"),S=y.get("type"),a=y.get("id"),O=y.get("activity");r&&S&&a&&(C({entityType:S,entities:[{id:a,projectName:r}],source:"url"}),O&&(g([O]),A({...o,overview:"activity"})))},[]);const Z={panelOpenByScope:i,getOpenForScope:U,setPanelOpen:M,setPanelOpenByScope:D,tabsByScope:o,getTabForScope:N,slideOut:x,openSlideOut:H,closeSlideOut:k,highlightedActivities:V,setHighlightedActivities:g,pip:z,openPip:J,closePip:K,entities:Q,setEntities:C,feedAnnotations:G,setFeedAnnotations:R,isDeveloperMode:v,isGuest:b,hasLicense:h,onPowerFeature:p,...l};return ee.jsxRuntimeExports.jsx(I.Provider,{value:Z,children:t})},B=()=>{const t=e.useContext(I);if(t===void 0)throw new Error("useDetailsPanel must be used within a DetailsProvider");return t},se=t=>{const{getOpenForScope:q,setPanelOpen:P,getTabForScope:u}=B(),[l,n]=F.useLocalStorage("details/tabs-by-scope",{}),[v,b]=e.useState(()=>l[t]??u(t)),f=e.useCallback(i=>{b(i),n({...l,[t]:i})},[t,n]),p=v,h=["activity","comments","versions","checklists"].includes(p);return{isOpen:q(t),setOpen:i=>P(t,i),currentTab:p,setTab:f,isFeed:h}};exports.DetailsPanelProvider=ue;exports.useDetailsPanelContext=B;exports.useScopedDetailsPanel=se;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const $=require("../../../_virtual/jsx-runtime.cjs.js"),e=require("react"),L=require("../hooks/useLocalStorage.cjs.js");require("./RemoteModulesContext.cjs.js");require("../../../_virtual/runtime.cjs.js");require("../../../_virtual/semver.cjs.js");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/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("lodash");require("react-toastify");require("./ThumbnailUploaderContext.cjs.js");require("./SettingsPanelContext.cjs.js");require("./pip/PiPProvider.cjs.js");require("react-dom");require("./pip/PiPWrapper.cjs.js");require("./AddonProjectContext.cjs.js");require("./AddonContext.cjs.js");const ee=require("./PowerpackContext.cjs.js");require("./MoveEntityContext.cjs.js");require("./MenuContext.cjs.js");require("./WebsocketContext.cjs.js");require("./GlobalContext.cjs.js");require("./ProjectContext.cjs.js");require("./ProjectFoldersContext.cjs.js");const re=require("./UriContext.cjs.js");require("react-redux");require("custom-protocol-check");require("../containers/ProjectTreeTable/components/GroupSettingsFallback.cjs.js");const F=e.createContext(void 0),te=({children:t,defaultTab:l="activity",hasLicense:v,debug:u={},...s})=>{const o=s.user,P="isDeveloperMode"in u?u.isDeveloperMode:o?.attrib?.developerMode??!1,b="isGuest"in u?u.isGuest:o?.data?.isGuest,{powerLicense:h,setPowerpackDialog:p}=ee.usePowerpack(),f="hasLicense"in u?u.hasLicense:!!h||v,[i,D]=e.useState({}),[B,M]=e.useState([]),R=e.useCallback(r=>i[r]?i[r]:!1,[i]),U=e.useCallback((r,S)=>{const a={...i};a[r]=S,D(a)},[i]),[c,A]=L.useLocalStorage("details/tabs-by-scope",{}),G=e.useCallback(r=>c[r]?c[r]:l,[c,l]),[k,m]=e.useState(null),N=e.useCallback(r=>{m(r)},[]),x=e.useCallback(()=>{m(null),k&&C([])},[]);e.useEffect(()=>{x()},[s.useLocation().pathname]);const[H,O]=e.useState(null),z=e.useCallback(r=>{O(r)},[]),J=e.useCallback(()=>{O(null)},[]),[K,g]=e.useState(null),[Q,C]=e.useState([]),{uriType:V,uri:W,entity:d,getUriEntities:X}=re.useURIContext(),[y]=s.useSearchParams();e.useEffect(()=>{if(V==="entity"&&d&&d.entityType!=="product"){X().then(q=>{if(q.length===0)return;const j=q.find(_=>_.uri===W),n=j?.entities?.[0];if(!j||!n)return;const w=n?.projectName||d.projectName||"",E=n.representationId||n.versionId||n.productId||n.taskId||n.folderId;if(!w||!E)return;const Z={entityType:d.entityType,entities:[{id:E,projectName:w}],source:"uri"};g(Z)}).catch(q=>{console.warn("Failed to get URI entities:",q)});return}const r=y.get("project"),S=y.get("type"),a=y.get("id"),T=y.get("activity");r&&S&&a&&(g({entityType:S,entities:[{id:a,projectName:r}],source:"url"}),T&&(C([T]),A({...c,overview:"activity"})))},[]);const Y={panelOpenByScope:i,getOpenForScope:R,setPanelOpen:U,setPanelOpenByScope:D,tabsByScope:c,getTabForScope:G,slideOut:k,openSlideOut:N,closeSlideOut:x,highlightedActivities:Q,setHighlightedActivities:C,pip:H,openPip:z,closePip:J,entities:K,setEntities:g,feedAnnotations:B,setFeedAnnotations:M,isDeveloperMode:P,isGuest:b,hasLicense:f,onPowerFeature:p,...s};return $.jsxRuntimeExports.jsx(F.Provider,{value:Y,children:t})},I=()=>{const t=e.useContext(F);if(t===void 0)throw new Error("useDetailsPanel must be used within a DetailsPanelProvider");return t},ie=t=>{const{getOpenForScope:l,setPanelOpen:v,getTabForScope:u}=I(),[s,o]=L.useLocalStorage("details/tabs-by-scope",{}),[P,b]=e.useState(()=>s[t]??u(t)),h=e.useCallback(i=>{b(i),o({...s,[t]:i})},[t,o]),p=P,f=["activity","comments","versions","checklists"].includes(p);return{isOpen:l(t),setOpen:i=>v(t,i),currentTab:p,setTab:h,isFeed:f}};exports.DetailsPanelProvider=te;exports.useDetailsPanelContext=I;exports.useScopedDetailsPanel=ie;
2
2
  //# sourceMappingURL=DetailsPanelContext.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DetailsPanelContext.cjs.js","sources":["../../../../src/context/DetailsPanelContext.tsx"],"sourcesContent":["import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react'\nimport { useLocalStorage } from '@shared/hooks'\nimport type { UserModel } from '@shared/api'\nimport { DetailsPanelEntityType } from '@shared/api'\nimport { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'\nimport { SavedAnnotationMetadata } from '@shared/containers'\nimport { PowerpackFeature, usePowerpack } from './PowerpackContext'\nimport { useGlobalContext } from './GlobalContext'\nimport { useURIContext } from './UriContext'\n\nexport type FeedFilters = 'activity' | 'comments' | 'versions' | 'checklists'\n\nexport type DetailsPanelTab = FeedFilters | 'details' | 'files'\n\nexport type SlideOut = {\n entityId: string\n entityType: DetailsPanelEntityType\n projectName: string\n}\n\nexport type DetailsPanelPip = {\n entityType: DetailsPanelEntityType\n entities: { id: string; projectName: string }[]\n scope: string\n}\n\nexport type Entities = {\n entityType: DetailsPanelEntityType\n entities: { id: string; projectName: string }[]\n entitySubTypes?: string[]\n source?: 'uri' | 'url' | 'related' // uri = ayon+entity://..., url = ?project=...&type=...&id=...\n}\n\nexport interface OpenStateByScope {\n [scope: string]: boolean\n}\n\n// Create a new interface for managing tab state by scope\nexport interface TabStateByScope {\n [scope: string]: DetailsPanelTab\n}\n\n// these props get forwarded to the details panel value\n// it's mainly redux callbacks that cannot be used in shared library\nexport interface DetailsPanelContextProps {\n dispatch?: any // this is a redux dispatch function and it's quite annoying we need to do this\n user: UserModel\n viewer?: {\n reviewableIds: string[]\n taskId?: string | null\n folderId?: string | null\n }\n // redux callback actions\n onOpenImage?: (args: any) => void\n onGoToFrame?: (frame: number) => void\n onOpenViewer?: (args: any) => void\n onUpdateEntity?: (data: { operations: any[]; entityType: string }) => void\n // route hooks\n useParams: typeof useParams\n useNavigate: typeof useNavigate\n useLocation: typeof useLocation\n useSearchParams: typeof useSearchParams\n feedAnnotationsEnabled?: boolean\n hasLicense?: boolean\n // debugging used to simulate different values\n debug?: {\n isDeveloperMode?: boolean\n isGuest?: boolean\n hasLicense?: boolean\n }\n}\n\n// Interface for our simplified context\nexport interface DetailsPanelContextType extends DetailsPanelContextProps {\n // user\n isDeveloperMode: boolean\n isGuest: boolean\n // Open state for the panel by scope\n panelOpenByScope: OpenStateByScope\n getOpenForScope: (scope: string) => boolean\n setPanelOpen: (scope: string, isOpen: boolean) => void\n setPanelOpenByScope: (newState: OpenStateByScope) => void\n\n // Tab preferences by scope\n tabsByScope: TabStateByScope\n getTabForScope: (scope: string) => DetailsPanelTab\n\n // Slide out state\n slideOut: null | SlideOut\n openSlideOut: (slideOut: SlideOut) => void\n closeSlideOut: () => void\n\n // Highlighted activities\n highlightedActivities: string[]\n setHighlightedActivities: (activities: string[]) => void\n\n // PiP state\n pip: DetailsPanelPip | null\n openPip: (pip: DetailsPanelPip) => void\n closePip: () => void\n\n // Entities state\n entities: Entities | null\n setEntities: (entities: Entities | null) => void\n\n // Annotations\n feedAnnotations: SavedAnnotationMetadata[]\n setFeedAnnotations: (annotations: SavedAnnotationMetadata[]) => void\n\n // powerpack\n onPowerFeature: (feature: PowerpackFeature) => void\n}\n\n// Create the context\nconst DetailsPanelContext = createContext<DetailsPanelContextType | undefined>(undefined)\n\n// Provider component\nexport interface DetailsPanelProviderProps extends DetailsPanelContextProps {\n children: ReactNode\n defaultTab?: DetailsPanelTab\n}\n\nexport const DetailsPanelProvider: React.FC<DetailsPanelProviderProps> = ({\n children,\n defaultTab = 'activity',\n hasLicense: hasLicenseProp,\n debug = {},\n ...forwardedProps\n}) => {\n // get current user\n const { user: currentUser } = useGlobalContext()\n const isDeveloperMode =\n 'isDeveloperMode' in debug\n ? (debug.isDeveloperMode as boolean)\n : currentUser?.attrib?.developerMode ?? false\n const isGuest = 'isGuest' in debug ? (debug.isGuest as boolean) : currentUser?.data?.isGuest\n\n // get license from powerpack or forwarded down from props\n const { powerLicense, setPowerpackDialog } = usePowerpack()\n const hasLicense =\n 'hasLicense' in debug ? (debug.hasLicense as boolean) : !!powerLicense || hasLicenseProp\n\n // keep track of the currently open panel by scope\n const [panelOpenByScope, setPanelOpenByScope] = useState<OpenStateByScope>({})\n const [feedAnnotations, setFeedAnnotations] = useState<SavedAnnotationMetadata[]>([])\n\n // get the current open state for a specific scope\n const getOpenForScope = useCallback(\n (scope: string): boolean => {\n // Check if we have a saved preference for this scope\n if (panelOpenByScope[scope]) {\n return panelOpenByScope[scope]\n }\n\n // Fall back to default\n return false\n },\n [panelOpenByScope],\n )\n // Set open state for a scope\n const setPanelOpen = useCallback(\n (scope: string, isOpen: boolean) => {\n // Create a new state object based on current open state\n const newState = { ...panelOpenByScope }\n newState[scope] = isOpen\n\n // Update the state with the new object\n setPanelOpenByScope(newState)\n },\n [panelOpenByScope],\n )\n\n // Use localStorage to persist tab preferences by scope\n const [tabsByScope, setTabByScope] = useLocalStorage<TabStateByScope>('details/tabs-by-scope', {})\n\n // Get the current tab for a specific scope\n const getTabForScope = useCallback(\n (scope: string): DetailsPanelTab => {\n // Check if we have a saved preference for this scope\n if (tabsByScope[scope]) {\n return tabsByScope[scope]\n }\n\n // Fall back to default\n return defaultTab\n },\n [tabsByScope, defaultTab],\n )\n\n // Set tab for a scope\n\n // is the slide out open?\n const [slideOut, setSlideOut] = useState<null | SlideOut>(null)\n\n // open the slide out\n const openSlideOut = useCallback<DetailsPanelContextType['openSlideOut']>((params) => {\n setSlideOut(params)\n }, [])\n\n // close the slide out\n const closeSlideOut = useCallback(() => {\n setSlideOut(null)\n if (slideOut) {\n setHighlightedActivities([])\n }\n }, [])\n\n // close slide out whenever the page changes\n useEffect(() => {\n closeSlideOut()\n }, [useLocation().pathname])\n\n const [pip, setPip] = useState<DetailsPanelPip | null>(null)\n\n const openPip = useCallback((pip: DetailsPanelPip) => {\n setPip(pip)\n }, [])\n const closePip = useCallback(() => {\n setPip(null)\n }, [])\n\n const [entities, setEntities] = useState<Entities | null>(null)\n\n const [highlightedActivities, setHighlightedActivities] = useState<string[]>([])\n\n const { uriType, uri, entity, getUriEntities } = useURIContext()\n const [searchParams] = useSearchParams()\n\n // on first load, check if there is a uri or URL params and open details panel if present\n useEffect(() => {\n // Priority 1: Check for 'uri' parameter (ayon+entity://...)\n if (uriType === 'entity' && entity && entity.entityType !== 'product') {\n getUriEntities()\n .then((result) => {\n if (result.length === 0) return\n\n const entityUriData = result.find((r) => r.uri === uri)\n const entityData = entityUriData?.entities?.[0]\n\n if (!entityUriData || !entityData) return\n const projectName = entityData?.projectName || entity.projectName || ''\n const id =\n entityData.representationId ||\n entityData.versionId ||\n entityData.productId ||\n entityData.taskId ||\n entityData.folderId\n\n if (!projectName || !id) return\n\n const newEntities: Entities = {\n entityType: entity.entityType as DetailsPanelEntityType,\n entities: [\n {\n id: id,\n projectName: projectName,\n },\n ],\n source: 'uri',\n }\n\n setEntities(newEntities)\n })\n .catch((err) => {\n console.warn('Failed to get URI entities:', err)\n })\n return\n }\n\n // Priority 2: Check for URL params (project, type, id)\n const project = searchParams.get('project')\n const type = searchParams.get('type')\n const id = searchParams.get('id')\n const activity = searchParams.get('activity')\n\n if (project && type && id) {\n const newEntities: Entities = {\n entityType: type as DetailsPanelEntityType,\n entities: [\n {\n id,\n projectName: project,\n },\n ],\n source: 'url',\n }\n\n setEntities(newEntities)\n\n // if there is an activity param, open the activity tab\n\n if (activity) {\n setHighlightedActivities([activity])\n setTabByScope({\n ...tabsByScope,\n overview: 'activity',\n })\n }\n }\n }, [])\n\n const value = {\n // open state for the panel by scope\n panelOpenByScope,\n getOpenForScope,\n setPanelOpen,\n setPanelOpenByScope,\n // tab preferences\n tabsByScope,\n getTabForScope,\n // slide out state\n slideOut,\n openSlideOut,\n closeSlideOut,\n // highlighted activities\n highlightedActivities,\n setHighlightedActivities,\n // PiP state\n pip,\n openPip,\n closePip,\n // entities state\n entities,\n setEntities,\n feedAnnotations,\n setFeedAnnotations,\n isDeveloperMode,\n isGuest,\n hasLicense,\n onPowerFeature: setPowerpackDialog,\n ...forwardedProps,\n }\n\n return <DetailsPanelContext.Provider value={value}>{children}</DetailsPanelContext.Provider>\n}\n\n// Custom hook to use the details context\nexport const useDetailsPanelContext = (): DetailsPanelContextType => {\n const context = useContext(DetailsPanelContext)\n if (context === undefined) {\n throw new Error('useDetailsPanel must be used within a DetailsProvider')\n }\n return context\n}\n\n// Add a specialized hook for using a panel in a specific scope\nexport const useScopedDetailsPanel = (scope: string) => {\n const { getOpenForScope, setPanelOpen, getTabForScope } = useDetailsPanelContext()\n\n const [tabsByScope, setTabsByScope] = useLocalStorage<TabStateByScope>(\n 'details/tabs-by-scope',\n {},\n )\n\n const [tab, setTab] = useState<DetailsPanelTab>(() => tabsByScope[scope] ?? getTabForScope(scope))\n\n // Keep localStorage and local state in sync\n const updateTab = useCallback(\n (newTab: DetailsPanelTab) => {\n setTab(newTab)\n setTabsByScope({ ...tabsByScope, [scope]: newTab })\n },\n [scope, setTabsByScope],\n )\n\n const currentTab = tab\n const isFeed = ['activity', 'comments', 'versions', 'checklists'].includes(currentTab)\n\n return {\n isOpen: getOpenForScope(scope),\n setOpen: (isOpen: boolean) => setPanelOpen(scope, isOpen),\n currentTab,\n setTab: updateTab,\n isFeed,\n }\n}\n"],"names":["DetailsPanelContext","createContext","DetailsPanelProvider","children","defaultTab","hasLicenseProp","debug","forwardedProps","currentUser","useGlobalContext","isDeveloperMode","isGuest","powerLicense","setPowerpackDialog","usePowerpack","hasLicense","panelOpenByScope","setPanelOpenByScope","useState","feedAnnotations","setFeedAnnotations","getOpenForScope","useCallback","scope","setPanelOpen","isOpen","newState","tabsByScope","setTabByScope","useLocalStorage","getTabForScope","slideOut","setSlideOut","openSlideOut","params","closeSlideOut","setHighlightedActivities","useEffect","useLocation","pip","setPip","openPip","closePip","entities","setEntities","highlightedActivities","uriType","uri","entity","getUriEntities","useURIContext","searchParams","useSearchParams","result","entityUriData","r","entityData","projectName","id","newEntities","err","project","type","activity","value","jsx","useDetailsPanelContext","context","useContext","useScopedDetailsPanel","setTabsByScope","tab","setTab","updateTab","newTab","currentTab","isFeed"],"mappings":"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"}
1
+ {"version":3,"file":"DetailsPanelContext.cjs.js","sources":["../../../../src/context/DetailsPanelContext.tsx"],"sourcesContent":["import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from 'react'\nimport { useLocalStorage } from '@shared/hooks'\nimport type { UserModel } from '@shared/api'\nimport { DetailsPanelEntityType } from '@shared/api'\nimport { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'\nimport { SavedAnnotationMetadata } from '@shared/containers'\nimport { PowerpackFeature, usePowerpack } from './PowerpackContext'\nimport { useURIContext } from './UriContext'\n\nexport type FeedFilters = 'activity' | 'comments' | 'versions' | 'checklists'\n\nexport type DetailsPanelTab = FeedFilters | 'details' | 'files'\n\nexport type SlideOut = {\n entityId: string\n entityType: DetailsPanelEntityType\n projectName: string\n}\n\nexport type DetailsPanelPip = {\n entityType: DetailsPanelEntityType\n entities: { id: string; projectName: string }[]\n scope: string\n}\n\nexport type Entities = {\n entityType: DetailsPanelEntityType\n entities: { id: string; projectName: string }[]\n entitySubTypes?: string[]\n source?: 'uri' | 'url' | 'related' // uri = ayon+entity://..., url = ?project=...&type=...&id=...\n}\n\nexport interface OpenStateByScope {\n [scope: string]: boolean\n}\n\n// Create a new interface for managing tab state by scope\nexport interface TabStateByScope {\n [scope: string]: DetailsPanelTab\n}\n\n// these props get forwarded to the details panel value\n// it's mainly redux callbacks that cannot be used in shared library\nexport interface DetailsPanelContextProps {\n dispatch?: any // this is a redux dispatch function and it's quite annoying we need to do this\n user: UserModel\n viewer?: {\n reviewableIds: string[]\n taskId?: string | null\n folderId?: string | null\n }\n // redux callback actions\n onOpenImage?: (args: any) => void\n onGoToFrame?: (frame: number) => void\n onOpenViewer?: (args: any) => void\n onUpdateEntity?: (data: { operations: any[]; entityType: string }) => void\n // route hooks\n useParams: typeof useParams\n useNavigate: typeof useNavigate\n useLocation: typeof useLocation\n useSearchParams: typeof useSearchParams\n feedAnnotationsEnabled?: boolean\n hasLicense?: boolean\n // debugging used to simulate different values\n debug?: {\n isDeveloperMode?: boolean\n isGuest?: boolean\n hasLicense?: boolean\n }\n}\n\n// Interface for our simplified context\nexport interface DetailsPanelContextType extends DetailsPanelContextProps {\n // user\n isDeveloperMode: boolean\n isGuest: boolean\n // Open state for the panel by scope\n panelOpenByScope: OpenStateByScope\n getOpenForScope: (scope: string) => boolean\n setPanelOpen: (scope: string, isOpen: boolean) => void\n setPanelOpenByScope: (newState: OpenStateByScope) => void\n\n // Tab preferences by scope\n tabsByScope: TabStateByScope\n getTabForScope: (scope: string) => DetailsPanelTab\n\n // Slide out state\n slideOut: null | SlideOut\n openSlideOut: (slideOut: SlideOut) => void\n closeSlideOut: () => void\n\n // Highlighted activities\n highlightedActivities: string[]\n setHighlightedActivities: (activities: string[]) => void\n\n // PiP state\n pip: DetailsPanelPip | null\n openPip: (pip: DetailsPanelPip) => void\n closePip: () => void\n\n // Entities state\n entities: Entities | null\n setEntities: (entities: Entities | null) => void\n\n // Annotations\n feedAnnotations: SavedAnnotationMetadata[]\n setFeedAnnotations: (annotations: SavedAnnotationMetadata[]) => void\n\n // powerpack\n onPowerFeature: (feature: PowerpackFeature) => void\n}\n\n// Create the context\nconst DetailsPanelContext = createContext<DetailsPanelContextType | undefined>(undefined)\n\n// Provider component\nexport interface DetailsPanelProviderProps extends DetailsPanelContextProps {\n children: ReactNode\n defaultTab?: DetailsPanelTab\n}\n\nexport const DetailsPanelProvider: React.FC<DetailsPanelProviderProps> = ({\n children,\n defaultTab = 'activity',\n hasLicense: hasLicenseProp,\n debug = {},\n ...forwardedProps\n}) => {\n const user = forwardedProps.user\n const isDeveloperMode =\n 'isDeveloperMode' in debug\n ? (debug.isDeveloperMode as boolean)\n : user?.attrib?.developerMode ?? false\n const isGuest = 'isGuest' in debug ? (debug.isGuest as boolean) : user?.data?.isGuest\n\n // get license from powerpack or forwarded down from props\n const { powerLicense, setPowerpackDialog } = usePowerpack()\n const hasLicense =\n 'hasLicense' in debug ? (debug.hasLicense as boolean) : !!powerLicense || hasLicenseProp\n\n // keep track of the currently open panel by scope\n const [panelOpenByScope, setPanelOpenByScope] = useState<OpenStateByScope>({})\n const [feedAnnotations, setFeedAnnotations] = useState<SavedAnnotationMetadata[]>([])\n\n // get the current open state for a specific scope\n const getOpenForScope = useCallback(\n (scope: string): boolean => {\n // Check if we have a saved preference for this scope\n if (panelOpenByScope[scope]) {\n return panelOpenByScope[scope]\n }\n\n // Fall back to default\n return false\n },\n [panelOpenByScope],\n )\n // Set open state for a scope\n const setPanelOpen = useCallback(\n (scope: string, isOpen: boolean) => {\n // Create a new state object based on current open state\n const newState = { ...panelOpenByScope }\n newState[scope] = isOpen\n\n // Update the state with the new object\n setPanelOpenByScope(newState)\n },\n [panelOpenByScope],\n )\n\n // Use localStorage to persist tab preferences by scope\n const [tabsByScope, setTabByScope] = useLocalStorage<TabStateByScope>('details/tabs-by-scope', {})\n\n // Get the current tab for a specific scope\n const getTabForScope = useCallback(\n (scope: string): DetailsPanelTab => {\n // Check if we have a saved preference for this scope\n if (tabsByScope[scope]) {\n return tabsByScope[scope]\n }\n\n // Fall back to default\n return defaultTab\n },\n [tabsByScope, defaultTab],\n )\n\n // Set tab for a scope\n\n // is the slide out open?\n const [slideOut, setSlideOut] = useState<null | SlideOut>(null)\n\n // open the slide out\n const openSlideOut = useCallback<DetailsPanelContextType['openSlideOut']>((params) => {\n setSlideOut(params)\n }, [])\n\n // close the slide out\n const closeSlideOut = useCallback(() => {\n setSlideOut(null)\n if (slideOut) {\n setHighlightedActivities([])\n }\n }, [])\n\n // close slide out whenever the page changes\n useEffect(() => {\n closeSlideOut()\n }, [forwardedProps.useLocation().pathname])\n\n const [pip, setPip] = useState<DetailsPanelPip | null>(null)\n\n const openPip = useCallback((pip: DetailsPanelPip) => {\n setPip(pip)\n }, [])\n const closePip = useCallback(() => {\n setPip(null)\n }, [])\n\n const [entities, setEntities] = useState<Entities | null>(null)\n\n const [highlightedActivities, setHighlightedActivities] = useState<string[]>([])\n\n const { uriType, uri, entity, getUriEntities } = useURIContext()\n const [searchParams] = forwardedProps.useSearchParams()\n\n // on first load, check if there is a uri or URL params and open details panel if present\n useEffect(() => {\n // Priority 1: Check for 'uri' parameter (ayon+entity://...)\n if (uriType === 'entity' && entity && entity.entityType !== 'product') {\n getUriEntities()\n .then((result) => {\n if (result.length === 0) return\n\n const entityUriData = result.find((r) => r.uri === uri)\n const entityData = entityUriData?.entities?.[0]\n\n if (!entityUriData || !entityData) return\n const projectName = entityData?.projectName || entity.projectName || ''\n const id =\n entityData.representationId ||\n entityData.versionId ||\n entityData.productId ||\n entityData.taskId ||\n entityData.folderId\n\n if (!projectName || !id) return\n\n const newEntities: Entities = {\n entityType: entity.entityType as DetailsPanelEntityType,\n entities: [\n {\n id: id,\n projectName: projectName,\n },\n ],\n source: 'uri',\n }\n\n setEntities(newEntities)\n })\n .catch((err) => {\n console.warn('Failed to get URI entities:', err)\n })\n return\n }\n\n // Priority 2: Check for URL params (project, type, id)\n const project = searchParams.get('project')\n const type = searchParams.get('type')\n const id = searchParams.get('id')\n const activity = searchParams.get('activity')\n\n if (project && type && id) {\n const newEntities: Entities = {\n entityType: type as DetailsPanelEntityType,\n entities: [\n {\n id,\n projectName: project,\n },\n ],\n source: 'url',\n }\n\n setEntities(newEntities)\n\n // if there is an activity param, open the activity tab\n\n if (activity) {\n setHighlightedActivities([activity])\n setTabByScope({\n ...tabsByScope,\n overview: 'activity',\n })\n }\n }\n }, [])\n\n const value = {\n // open state for the panel by scope\n panelOpenByScope,\n getOpenForScope,\n setPanelOpen,\n setPanelOpenByScope,\n // tab preferences\n tabsByScope,\n getTabForScope,\n // slide out state\n slideOut,\n openSlideOut,\n closeSlideOut,\n // highlighted activities\n highlightedActivities,\n setHighlightedActivities,\n // PiP state\n pip,\n openPip,\n closePip,\n // entities state\n entities,\n setEntities,\n feedAnnotations,\n setFeedAnnotations,\n isDeveloperMode,\n isGuest,\n hasLicense,\n onPowerFeature: setPowerpackDialog,\n ...forwardedProps,\n }\n\n return <DetailsPanelContext.Provider value={value}>{children}</DetailsPanelContext.Provider>\n}\n\n// Custom hook to use the details context\nexport const useDetailsPanelContext = (): DetailsPanelContextType => {\n const context = useContext(DetailsPanelContext)\n if (context === undefined) {\n throw new Error('useDetailsPanel must be used within a DetailsPanelProvider')\n }\n return context\n}\n\n// Add a specialized hook for using a panel in a specific scope\nexport const useScopedDetailsPanel = (scope: string) => {\n const { getOpenForScope, setPanelOpen, getTabForScope } = useDetailsPanelContext()\n\n const [tabsByScope, setTabsByScope] = useLocalStorage<TabStateByScope>(\n 'details/tabs-by-scope',\n {},\n )\n\n const [tab, setTab] = useState<DetailsPanelTab>(() => tabsByScope[scope] ?? getTabForScope(scope))\n\n // Keep localStorage and local state in sync\n const updateTab = useCallback(\n (newTab: DetailsPanelTab) => {\n setTab(newTab)\n setTabsByScope({ ...tabsByScope, [scope]: newTab })\n },\n [scope, setTabsByScope],\n )\n\n const currentTab = tab\n const isFeed = ['activity', 'comments', 'versions', 'checklists'].includes(currentTab)\n\n return {\n isOpen: getOpenForScope(scope),\n setOpen: (isOpen: boolean) => setPanelOpen(scope, isOpen),\n currentTab,\n setTab: updateTab,\n isFeed,\n }\n}\n"],"names":["DetailsPanelContext","createContext","DetailsPanelProvider","children","defaultTab","hasLicenseProp","debug","forwardedProps","user","isDeveloperMode","isGuest","powerLicense","setPowerpackDialog","usePowerpack","hasLicense","panelOpenByScope","setPanelOpenByScope","useState","feedAnnotations","setFeedAnnotations","getOpenForScope","useCallback","scope","setPanelOpen","isOpen","newState","tabsByScope","setTabByScope","useLocalStorage","getTabForScope","slideOut","setSlideOut","openSlideOut","params","closeSlideOut","setHighlightedActivities","useEffect","pip","setPip","openPip","closePip","entities","setEntities","highlightedActivities","uriType","uri","entity","getUriEntities","useURIContext","searchParams","result","entityUriData","r","entityData","projectName","id","newEntities","err","project","type","activity","value","jsx","useDetailsPanelContext","context","useContext","useScopedDetailsPanel","setTabsByScope","tab","setTab","updateTab","newTab","currentTab","isFeed"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { j as tt } from "../../../_virtual/jsx-runtime.es.js";
2
- import { createContext as ot, useContext as it, useState as s, useCallback as r, useEffect as B } from "react";
2
+ import { createContext as it, useContext as ot, useState as s, useCallback as r, useEffect as C } from "react";
3
3
  import { useLocalStorage as k } from "../hooks/useLocalStorage.es.js";
4
4
  import "./RemoteModulesContext.es.js";
5
5
  import "../../../_virtual/runtime.es.js";
@@ -102,143 +102,142 @@ import { usePowerpack as et } from "./PowerpackContext.es.js";
102
102
  import "./MoveEntityContext.es.js";
103
103
  import "./MenuContext.es.js";
104
104
  import "./WebsocketContext.es.js";
105
- import { useGlobalContext as rt } from "./GlobalContext.es.js";
105
+ import "./GlobalContext.es.js";
106
106
  import "./ProjectContext.es.js";
107
107
  import "./ProjectFoldersContext.es.js";
108
- import { useURIContext as pt } from "./UriContext.es.js";
108
+ import { useURIContext as rt } from "./UriContext.es.js";
109
109
  import "react-redux";
110
110
  import "custom-protocol-check";
111
111
  import "../containers/ProjectTreeTable/components/GroupSettingsFallback.es.js";
112
- import { useLocation as st, useSearchParams as nt } from "react-router-dom";
113
- const G = ot(void 0), yi = ({
114
- children: o,
115
- defaultTab: l = "activity",
116
- hasLicense: P,
112
+ const A = it(void 0), co = ({
113
+ children: i,
114
+ defaultTab: u = "activity",
115
+ hasLicense: h,
117
116
  debug: e = {},
118
- ...u
117
+ ...p
119
118
  }) => {
120
- const { user: n } = rt(), h = "isDeveloperMode" in e ? e.isDeveloperMode : n?.attrib?.developerMode ?? !1, S = "isGuest" in e ? e.isGuest : n?.data?.isGuest, { powerLicense: b, setPowerpackDialog: d } = et(), g = "hasLicense" in e ? e.hasLicense : !!b || P, [i, O] = s({}), [U, A] = s([]), M = r(
121
- (t) => i[t] ? i[t] : !1,
122
- [i]
123
- ), N = r(
124
- (t, v) => {
125
- const c = { ...i };
126
- c[t] = v, O(c);
119
+ const m = p.user, S = "isDeveloperMode" in e ? e.isDeveloperMode : m?.attrib?.developerMode ?? !1, P = "isGuest" in e ? e.isGuest : m?.data?.isGuest, { powerLicense: g, setPowerpackDialog: d } = et(), D = "hasLicense" in e ? e.hasLicense : !!g || h, [o, T] = s({}), [G, M] = s([]), N = r(
120
+ (t) => o[t] ? o[t] : !1,
121
+ [o]
122
+ ), U = r(
123
+ (t, f) => {
124
+ const a = { ...o };
125
+ a[t] = f, T(a);
127
126
  },
128
- [i]
129
- ), [m, R] = k("details/tabs-by-scope", {}), H = r(
130
- (t) => m[t] ? m[t] : l,
131
- [m, l]
132
- ), [x, T] = s(null), q = r((t) => {
133
- T(t);
134
- }, []), j = r(() => {
135
- T(null), x && D([]);
127
+ [o]
128
+ ), [c, R] = k("details/tabs-by-scope", {}), H = r(
129
+ (t) => c[t] ? c[t] : u,
130
+ [c, u]
131
+ ), [x, j] = s(null), q = r((t) => {
132
+ j(t);
133
+ }, []), w = r(() => {
134
+ j(null), x && b([]);
136
135
  }, []);
137
- B(() => {
138
- j();
139
- }, [st().pathname]);
136
+ C(() => {
137
+ w();
138
+ }, [p.useLocation().pathname]);
140
139
  const [z, E] = s(null), J = r((t) => {
141
140
  E(t);
142
141
  }, []), K = r(() => {
143
142
  E(null);
144
- }, []), [Q, w] = s(null), [V, D] = s([]), { uriType: W, uri: X, entity: y, getUriEntities: Y } = pt(), [f] = nt();
145
- B(() => {
143
+ }, []), [Q, O] = s(null), [V, b] = s([]), { uriType: W, uri: X, entity: y, getUriEntities: Y } = rt(), [v] = p.useSearchParams();
144
+ C(() => {
146
145
  if (W === "entity" && y && y.entityType !== "product") {
147
- Y().then((a) => {
148
- if (a.length === 0) return;
149
- const C = a.find(($) => $.uri === X), p = C?.entities?.[0];
150
- if (!C || !p) return;
151
- const I = p?.projectName || y.projectName || "", L = p.representationId || p.versionId || p.productId || p.taskId || p.folderId;
152
- if (!I || !L) return;
146
+ Y().then((l) => {
147
+ if (l.length === 0) return;
148
+ const I = l.find(($) => $.uri === X), n = I?.entities?.[0];
149
+ if (!I || !n) return;
150
+ const L = n?.projectName || y.projectName || "", B = n.representationId || n.versionId || n.productId || n.taskId || n.folderId;
151
+ if (!L || !B) return;
153
152
  const _ = {
154
153
  entityType: y.entityType,
155
154
  entities: [
156
155
  {
157
- id: L,
158
- projectName: I
156
+ id: B,
157
+ projectName: L
159
158
  }
160
159
  ],
161
160
  source: "uri"
162
161
  };
163
- w(_);
164
- }).catch((a) => {
165
- console.warn("Failed to get URI entities:", a);
162
+ O(_);
163
+ }).catch((l) => {
164
+ console.warn("Failed to get URI entities:", l);
166
165
  });
167
166
  return;
168
167
  }
169
- const t = f.get("project"), v = f.get("type"), c = f.get("id"), F = f.get("activity");
170
- t && v && c && (w({
171
- entityType: v,
168
+ const t = v.get("project"), f = v.get("type"), a = v.get("id"), F = v.get("activity");
169
+ t && f && a && (O({
170
+ entityType: f,
172
171
  entities: [
173
172
  {
174
- id: c,
173
+ id: a,
175
174
  projectName: t
176
175
  }
177
176
  ],
178
177
  source: "url"
179
- }), F && (D([F]), R({
180
- ...m,
178
+ }), F && (b([F]), R({
179
+ ...c,
181
180
  overview: "activity"
182
181
  })));
183
182
  }, []);
184
183
  const Z = {
185
184
  // open state for the panel by scope
186
- panelOpenByScope: i,
187
- getOpenForScope: M,
188
- setPanelOpen: N,
189
- setPanelOpenByScope: O,
185
+ panelOpenByScope: o,
186
+ getOpenForScope: N,
187
+ setPanelOpen: U,
188
+ setPanelOpenByScope: T,
190
189
  // tab preferences
191
- tabsByScope: m,
190
+ tabsByScope: c,
192
191
  getTabForScope: H,
193
192
  // slide out state
194
193
  slideOut: x,
195
194
  openSlideOut: q,
196
- closeSlideOut: j,
195
+ closeSlideOut: w,
197
196
  // highlighted activities
198
197
  highlightedActivities: V,
199
- setHighlightedActivities: D,
198
+ setHighlightedActivities: b,
200
199
  // PiP state
201
200
  pip: z,
202
201
  openPip: J,
203
202
  closePip: K,
204
203
  // entities state
205
204
  entities: Q,
206
- setEntities: w,
207
- feedAnnotations: U,
208
- setFeedAnnotations: A,
209
- isDeveloperMode: h,
210
- isGuest: S,
211
- hasLicense: g,
205
+ setEntities: O,
206
+ feedAnnotations: G,
207
+ setFeedAnnotations: M,
208
+ isDeveloperMode: S,
209
+ isGuest: P,
210
+ hasLicense: D,
212
211
  onPowerFeature: d,
213
- ...u
212
+ ...p
214
213
  };
215
- return /* @__PURE__ */ tt.jsx(G.Provider, { value: Z, children: o });
216
- }, mt = () => {
217
- const o = it(G);
218
- if (o === void 0)
219
- throw new Error("useDetailsPanel must be used within a DetailsProvider");
220
- return o;
221
- }, fi = (o) => {
222
- const { getOpenForScope: l, setPanelOpen: P, getTabForScope: e } = mt(), [u, n] = k(
214
+ return /* @__PURE__ */ tt.jsx(A.Provider, { value: Z, children: i });
215
+ }, pt = () => {
216
+ const i = ot(A);
217
+ if (i === void 0)
218
+ throw new Error("useDetailsPanel must be used within a DetailsPanelProvider");
219
+ return i;
220
+ }, ao = (i) => {
221
+ const { getOpenForScope: u, setPanelOpen: h, getTabForScope: e } = pt(), [p, m] = k(
223
222
  "details/tabs-by-scope",
224
223
  {}
225
- ), [h, S] = s(() => u[o] ?? e(o)), b = r(
226
- (i) => {
227
- S(i), n({ ...u, [o]: i });
224
+ ), [S, P] = s(() => p[i] ?? e(i)), g = r(
225
+ (o) => {
226
+ P(o), m({ ...p, [i]: o });
228
227
  },
229
- [o, n]
230
- ), d = h, g = ["activity", "comments", "versions", "checklists"].includes(d);
228
+ [i, m]
229
+ ), d = S, D = ["activity", "comments", "versions", "checklists"].includes(d);
231
230
  return {
232
- isOpen: l(o),
233
- setOpen: (i) => P(o, i),
231
+ isOpen: u(i),
232
+ setOpen: (o) => h(i, o),
234
233
  currentTab: d,
235
- setTab: b,
236
- isFeed: g
234
+ setTab: g,
235
+ isFeed: D
237
236
  };
238
237
  };
239
238
  export {
240
- yi as DetailsPanelProvider,
241
- mt as useDetailsPanelContext,
242
- fi as useScopedDetailsPanel
239
+ co as DetailsPanelProvider,
240
+ pt as useDetailsPanelContext,
241
+ ao as useScopedDetailsPanel
243
242
  };
244
243
  //# sourceMappingURL=DetailsPanelContext.es.js.map