@ynput/ayon-frontend-shared 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/entities/updateEntity.es.js +125 -120
- package/dist/shared/src/api/queries/entities/updateEntity.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js +1 -1
- package/dist/shared/src/api/queries/views/getViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/getViews.es.js +20 -24
- package/dist/shared/src/api/queries/views/getViews.es.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.cjs.js +1 -1
- package/dist/shared/src/api/queries/views/updateViews.cjs.js.map +1 -1
- package/dist/shared/src/api/queries/views/updateViews.es.js +177 -118
- package/dist/shared/src/api/queries/views/updateViews.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/LinkManagerItem.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js +30 -28
- package/dist/shared/src/components/LinksManager/LinkManagerItem.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.cjs.js +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.es.js +74 -56
- package/dist/shared/src/components/LinksManager/LinksManager.es.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js +2 -1
- package/dist/shared/src/components/LinksManager/LinksManager.styled.cjs.js.map +1 -1
- package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js +5 -4
- package/dist/shared/src/components/LinksManager/LinksManager.styled.es.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js +1 -1
- package/dist/shared/src/containers/Feed/Feed.cjs.js.map +1 -1
- package/dist/shared/src/containers/Feed/Feed.es.js +123 -113
- package/dist/shared/src/containers/Feed/Feed.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js +3 -3
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js +178 -172
- package/dist/shared/src/containers/ProjectTreeTable/context/ClipboardContext.es.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.cjs.js.map +1 -1
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js +42 -41
- package/dist/shared/src/containers/ProjectTreeTable/widgets/LinksWidget.es.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js +26 -26
- package/dist/shared/src/containers/Views/ViewsMenuContainer/BaseViewsTags.es.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js +80 -76
- package/dist/shared/src/containers/Views/context/ViewsContext.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.es.js +95 -52
- package/dist/shared/src/containers/Views/hooks/useBaseViewMutations.es.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js +13 -13
- package/dist/shared/src/containers/Views/hooks/useViewsMutations.es.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.cjs.js.map +1 -1
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js +55 -38
- package/dist/shared/src/containers/Views/utils/viewUpdateHelper.es.js.map +1 -1
- package/dist/types/components/LinksManager/LinkManagerItem.d.ts +1 -0
- package/dist/types/containers/Views/context/ViewsContext.d.ts +1 -0
- package/dist/types/containers/Views/hooks/useBaseViewMutations.d.ts +5 -2
- package/dist/types/containers/Views/utils/viewUpdateHelper.d.ts +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkManagerItem.es.js","sources":["../../../../../src/components/LinksManager/LinkManagerItem.tsx"],"sourcesContent":["import { FC, Fragment } from 'react'\nimport { Button, Icon } from '@ynput/ayon-react-components'\nimport { getEntityTypeIcon } from '@shared/util'\nimport { detailsPanelEntityTypes } from '@shared/api'\nimport * as Styled from './LinksManager.styled'\nimport { LinkEntity } from './LinksManager'\nimport clsx from 'clsx'\n\nexport interface LinkManagerItemProps {\n link: LinkEntity\n isSelected?: boolean\n onEntityClick?: (entityId: string, entityType: string) => void\n onRemove: (e: React.MouseEvent<HTMLButtonElement>, link: LinkEntity) => void\n}\n\nexport const LinkManagerItem: FC<LinkManagerItemProps> = ({\n link,\n isSelected = false,\n onEntityClick,\n onRemove,\n}) => {\n const entityTypeSupported = detailsPanelEntityTypes.includes(link.entityType as any)\n const isClickable = entityTypeSupported && !link.isRestricted\n\n return (\n <Styled.LinkItem\n key={link.linkId}\n onClick={() => isClickable && onEntityClick?.(link.entityId, link.entityType)}\n data-tooltip={\n link.isRestricted\n ? \
|
|
1
|
+
{"version":3,"file":"LinkManagerItem.es.js","sources":["../../../../../src/components/LinksManager/LinkManagerItem.tsx"],"sourcesContent":["import { FC, Fragment } from 'react'\nimport { Button, Icon } from '@ynput/ayon-react-components'\nimport { getEntityTypeIcon } from '@shared/util'\nimport { detailsPanelEntityTypes } from '@shared/api'\nimport * as Styled from './LinksManager.styled'\nimport { LinkEntity } from './LinksManager'\nimport clsx from 'clsx'\n\nexport interface LinkManagerItemProps {\n link: LinkEntity\n isSelected?: boolean\n onEntityClick?: (entityId: string, entityType: string) => void\n onRemove: (e: React.MouseEvent<HTMLButtonElement>, link: LinkEntity) => void\n isManager?: boolean\n}\n\nexport const LinkManagerItem: FC<LinkManagerItemProps> = ({\n link,\n isSelected = false,\n onEntityClick,\n onRemove,\n isManager = false,\n}) => {\n const entityTypeSupported = detailsPanelEntityTypes.includes(link.entityType as any)\n const isClickable = entityTypeSupported && !link.isRestricted\n\n return (\n <Styled.LinkItem\n key={link.linkId}\n onClick={() => isClickable && onEntityClick?.(link.entityId, link.entityType)}\n data-tooltip={\n link.isRestricted\n ? isManager\n ? 'Unknown Link - Entity not found'\n : 'Access Restricted - Insufficient Permissions to Entity'\n : link.parents.join('/') + '/' + link.label\n }\n className={clsx({\n clickable: isClickable,\n selected: isSelected,\n restricted: link.isRestricted && !isManager,\n unknown: link.isRestricted && isManager,\n })}\n >\n {link.icon ? <Icon icon={link.icon} /> : <Icon icon={getEntityTypeIcon(link.entityType)} />}\n\n <span className=\"title\">\n {link.isRestricted ? (\n <span className=\"label\">{isManager ? 'Unknown' : 'Access Restricted'}</span>\n ) : (\n <>\n {link.parents?.map((part, index) => (\n <Fragment key={index}>\n <span key={index + '-path'}>{part}</span>\n <span key={index + '-separator'}>/</span>\n </Fragment>\n ))}\n <span className=\"label\">{link.label}</span>\n </>\n )}\n </span>\n {(!link.isRestricted || isManager) && (\n <Button\n icon={'link_off'}\n variant=\"text\"\n className=\"remove\"\n onClick={(e) => onRemove(e, link)}\n data-tooltip={'Remove link'}\n />\n )}\n </Styled.LinkItem>\n )\n}\n"],"names":["LinkManagerItem","link","isSelected","onEntityClick","onRemove","isManager","isClickable","detailsPanelEntityTypes","jsxs","Styled.LinkItem","clsx","jsx","Icon","getEntityTypeIcon","Fragment","part","index","Button","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBO,MAAMA,KAA4C,CAAC;AAAA,EACxD,MAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,eAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAAM;AAEJ,QAAMC,IADsBC,EAAwB,SAASN,EAAK,UAAiB,KACxC,CAACA,EAAK;AAEjD,SACEO,gBAAAA,EAAAA;AAAAA,IAACC;AAAAA,IAAA;AAAA,MAEC,SAAS,MAAMH,KAAeH,IAAgBF,EAAK,UAAUA,EAAK,UAAU;AAAA,MAC5E,gBACEA,EAAK,eACDI,IACE,oCACA,2DACFJ,EAAK,QAAQ,KAAK,GAAG,IAAI,MAAMA,EAAK;AAAA,MAE1C,WAAWS,EAAK;AAAA,QACd,WAAWJ;AAAA,QACX,UAAUJ;AAAA,QACV,YAAYD,EAAK,gBAAgB,CAACI;AAAA,QAClC,SAASJ,EAAK,gBAAgBI;AAAA,MAAA,CAC/B;AAAA,MAEA,UAAA;AAAA,QAAAJ,EAAK,OAAOU,gBAAAA,EAAAA,IAACC,GAAA,EAAK,MAAMX,EAAK,KAAA,CAAM,IAAKU,gBAAAA,EAAAA,IAACC,GAAA,EAAK,MAAMC,EAAkBZ,EAAK,UAAU,GAAG;AAAA,QAEzFU,gBAAAA,MAAC,QAAA,EAAK,WAAU,SACb,YAAK,eACJA,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,SAAS,UAAAN,IAAY,YAAY,oBAAA,CAAoB,IAErEG,gBAAAA,EAAAA,KAAAM,YAAA,EACG,UAAA;AAAA,UAAAb,EAAK,SAAS,IAAI,CAACc,GAAMC,MACxBR,gBAAAA,EAAAA,KAACM,GAAA,EACC,UAAA;AAAA,YAAAH,gBAAAA,EAAAA,IAAC,QAAA,EAA4B,UAAAI,EAAA,GAAlBC,IAAQ,OAAe;AAAA,YAClCL,gBAAAA,EAAAA,IAAC,QAAA,EAAgC,UAAA,IAAA,GAAtBK,IAAQ,YAAe;AAAA,UAAA,EAAA,GAFrBA,CAGf,CACD;AAAA,UACDL,gBAAAA,EAAAA,IAAC,QAAA,EAAK,WAAU,SAAS,YAAK,MAAA,CAAM;AAAA,QAAA,EAAA,CACtC,EAAA,CAEJ;AAAA,SACE,CAACV,EAAK,gBAAgBI,MACtBM,gBAAAA,EAAAA;AAAAA,UAACM;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,SAAS,CAACC,MAAMd,EAASc,GAAGjB,CAAI;AAAA,YAChC,gBAAc;AAAA,UAAA;AAAA,QAAA;AAAA,MAChB;AAAA,IAAA;AAAA,IAxCGA,EAAK;AAAA,EAAA;AA4ChB;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../../../_virtual/jsx-runtime.cjs.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../../../_virtual/jsx-runtime.cjs.js"),I=require("react"),i=require("./LinksManager.styled.cjs.js"),S=require("lodash");require("react-toastify");const q=require("../../util/getEntityId.cjs.js");require("../../util/pubsub.cjs.js");const L=require("./hooks/useUpdateLinks.cjs.js"),M=require("./AddNewLinks.cjs.js"),v=require("../../containers/EntityPickerDialog/EntityPickerDialog.cjs.js"),b=require("./LinkManagerItem.cjs.js"),C=require("@ynput/ayon-react-components");require("../../context/RemoteModulesContext.cjs.js");require("../../context/DetailsPanelContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");const T=require("../../context/GlobalContext.cjs.js");require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");const P=({linkTypeLabel:p,direction:u,links:a=[],projectName:n,entityId:m,entityType:y,linkType:g,targetEntityType:s,folderId:d,selectedEntityIds:j=[],onClose:c,onEntityClick:E})=>{const{user:l}=T.useGlobalContext(),R=l?.data?.isAdmin||l?.data?.isManager,o=L({projectName:n,direction:u,entityId:m,entityType:y,targetEntityType:s,linkType:g}),[k,x]=I.useState(null),h=(t,r)=>{t.stopPropagation(),o.remove([{id:r.linkId,target:{entityId:r.entityId,entityType:r.entityType}}])};return e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[e.jsxRuntimeExports.jsxs(i.Container,{children:[e.jsxRuntimeExports.jsxs(i.Header,{children:[S.upperFirst(p)," links (",u,")",e.jsxRuntimeExports.jsx(C.Button,{icon:"close",variant:"text",className:"remove",onClick:c,"data-shortcut":"Escape","data-tooltip-delay":500})]}),e.jsxRuntimeExports.jsxs(i.LinksList,{children:[a?.map(t=>e.jsxRuntimeExports.jsx(b.LinkManagerItem,{link:t,isSelected:j.includes(t.entityId),onEntityClick:E,onRemove:h,isManager:R},t.linkId)),a.length===0&&e.jsxRuntimeExports.jsx(i.SubHeader,{children:"No links yet"})]}),e.jsxRuntimeExports.jsx(M,{targetEntityType:s,projectName:n,onClose:c,onAdd:t=>o.add([{targetEntityId:t,linkId:q.getEntityId()}]),onSearchTypeChange:x})]}),k==="picker"&&e.jsxRuntimeExports.jsx(v.EntityPickerDialog,{onClose:()=>x(null),projectName:n,entityType:s,initialSelection:d?{folder:{[d]:!0}}:void 0,onSubmit:t=>o.add(t.map(r=>({targetEntityId:r,linkId:q.getEntityId()}))),isMultiSelect:!0})]})};exports.LinksManager=P;
|
|
2
2
|
//# sourceMappingURL=LinksManager.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinksManager.cjs.js","sources":["../../../../../src/components/LinksManager/LinksManager.tsx"],"sourcesContent":["import { FC, useState } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { getEntityId } from '@shared/util'\nimport useUpdateLinks from './hooks/useUpdateLinks'\nimport AddNewLinks, { LinkSearchType } from './AddNewLinks'\nimport { EntityPickerDialog, PickerEntityType } from '@shared/containers/EntityPickerDialog'\nimport { upperFirst } from 'lodash'\nimport { LinkManagerItem } from './LinkManagerItem'\nimport { Button } from '@ynput/ayon-react-components'\n\nexport type LinkEntity = {\n linkId: string\n entityId: string\n label: string\n parents: string[]\n entityType: string\n icon: string\n isRestricted?: boolean // flag to indicate if this link is restricted (node is null from API)\n}\n\nexport interface LinksManagerProps {\n linkTypeLabel: string\n direction?: 'in' | 'out'\n links: LinkEntity[] // used to display basic info about the links entity\n projectName: string\n entityId: string // the entity id of the entity that has these links\n linkType: string // full link type e.g. workflow|task|task\n entityType: string // the entity type of the entity that has these links\n targetEntityType: string // the entity type of the out links\n folderId?: string | null // the folder selected or the parent folder of the selected (used in EntityPickerDialog)\n selectedEntityIds?: string[] // list of selected entity IDs to highlight\n onClose?: () => void\n onEntityClick?: (entityId: string, entityType: string) => void // a click on an linked entity\n}\n\nexport const LinksManager: FC<LinksManagerProps> = ({\n linkTypeLabel,\n direction,\n links = [],\n projectName,\n entityId,\n entityType,\n linkType,\n targetEntityType,\n folderId,\n selectedEntityIds = [],\n onClose,\n onEntityClick,\n}) => {\n const linksUpdater = useUpdateLinks({\n projectName,\n direction,\n entityId,\n entityType,\n targetEntityType,\n linkType,\n })\n\n const [searchType, setSearchType] = useState<LinkSearchType>(null)\n\n const handleRemove = (e: React.MouseEvent<HTMLButtonElement>, link: LinkEntity) => {\n // prevent clicks higher up\n e.stopPropagation()\n\n linksUpdater.remove([\n {\n id: link.linkId,\n target: { entityId: link.entityId, entityType: link.entityType },\n },\n ])\n }\n\n return (\n <>\n <Styled.Container>\n <Styled.Header>\n {upperFirst(linkTypeLabel)} links ({direction})\n <Button\n icon={'close'}\n variant=\"text\"\n className=\"remove\"\n onClick={onClose}\n data-shortcut={'Escape'}\n data-tooltip-delay={500}\n />\n </Styled.Header>\n <Styled.LinksList>\n {links?.map((link) => (\n <LinkManagerItem\n key={link.linkId}\n link={link}\n isSelected={selectedEntityIds.includes(link.entityId)}\n onEntityClick={onEntityClick}\n onRemove={handleRemove}\n />\n ))}\n {links.length === 0 && <Styled.SubHeader>No links yet</Styled.SubHeader>}\n </Styled.LinksList>\n <AddNewLinks\n targetEntityType={targetEntityType}\n projectName={projectName}\n onClose={onClose}\n onAdd={(id) => linksUpdater.add([{ targetEntityId: id, linkId: getEntityId() }])}\n onSearchTypeChange={setSearchType}\n />\n </Styled.Container>\n {searchType === 'picker' && (\n <EntityPickerDialog\n onClose={() => setSearchType(null)}\n projectName={projectName}\n entityType={targetEntityType as PickerEntityType} // the type of entity to pick\n initialSelection={folderId ? { folder: { [folderId]: true } } : undefined} // preselect current folder\n onSubmit={(s) =>\n linksUpdater.add(s.map((id) => ({ targetEntityId: id, linkId: getEntityId() })))\n }\n isMultiSelect\n />\n )}\n </>\n )\n}\n"],"names":["LinksManager","linkTypeLabel","direction","links","projectName","entityId","entityType","linkType","targetEntityType","folderId","selectedEntityIds","onClose","onEntityClick","linksUpdater","useUpdateLinks","searchType","setSearchType","useState","handleRemove","e","link","jsxs","Fragment","Styled.Container","Styled.Header","upperFirst","jsx","Button","Styled.LinksList","LinkManagerItem","Styled.SubHeader","AddNewLinks","id","getEntityId","EntityPickerDialog","s"],"mappings":"
|
|
1
|
+
{"version":3,"file":"LinksManager.cjs.js","sources":["../../../../../src/components/LinksManager/LinksManager.tsx"],"sourcesContent":["import { FC, useState } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { getEntityId } from '@shared/util'\nimport useUpdateLinks from './hooks/useUpdateLinks'\nimport AddNewLinks, { LinkSearchType } from './AddNewLinks'\nimport { EntityPickerDialog, PickerEntityType } from '@shared/containers/EntityPickerDialog'\nimport { upperFirst } from 'lodash'\nimport { LinkManagerItem } from './LinkManagerItem'\nimport { Button } from '@ynput/ayon-react-components'\nimport { useGlobalContext } from '@shared/context'\n\nexport type LinkEntity = {\n linkId: string\n entityId: string\n label: string\n parents: string[]\n entityType: string\n icon: string\n isRestricted?: boolean // flag to indicate if this link is restricted (node is null from API)\n}\n\nexport interface LinksManagerProps {\n linkTypeLabel: string\n direction?: 'in' | 'out'\n links: LinkEntity[] // used to display basic info about the links entity\n projectName: string\n entityId: string // the entity id of the entity that has these links\n linkType: string // full link type e.g. workflow|task|task\n entityType: string // the entity type of the entity that has these links\n targetEntityType: string // the entity type of the out links\n folderId?: string | null // the folder selected or the parent folder of the selected (used in EntityPickerDialog)\n selectedEntityIds?: string[] // list of selected entity IDs to highlight\n onClose?: () => void\n onEntityClick?: (entityId: string, entityType: string) => void // a click on an linked entity\n}\n\nexport const LinksManager: FC<LinksManagerProps> = ({\n linkTypeLabel,\n direction,\n links = [],\n projectName,\n entityId,\n entityType,\n linkType,\n targetEntityType,\n folderId,\n selectedEntityIds = [],\n onClose,\n onEntityClick,\n}) => {\n const { user } = useGlobalContext()\n const isManager = user?.data?.isAdmin || user?.data?.isManager\n\n const linksUpdater = useUpdateLinks({\n projectName,\n direction,\n entityId,\n entityType,\n targetEntityType,\n linkType,\n })\n\n const [searchType, setSearchType] = useState<LinkSearchType>(null)\n\n const handleRemove = (e: React.MouseEvent<HTMLButtonElement>, link: LinkEntity) => {\n // prevent clicks higher up\n e.stopPropagation()\n\n linksUpdater.remove([\n {\n id: link.linkId,\n target: { entityId: link.entityId, entityType: link.entityType },\n },\n ])\n }\n\n return (\n <>\n <Styled.Container>\n <Styled.Header>\n {upperFirst(linkTypeLabel)} links ({direction})\n <Button\n icon={'close'}\n variant=\"text\"\n className=\"remove\"\n onClick={onClose}\n data-shortcut={'Escape'}\n data-tooltip-delay={500}\n />\n </Styled.Header>\n <Styled.LinksList>\n {links?.map((link) => (\n <LinkManagerItem\n key={link.linkId}\n link={link}\n isSelected={selectedEntityIds.includes(link.entityId)}\n onEntityClick={onEntityClick}\n onRemove={handleRemove}\n isManager={isManager}\n />\n ))}\n {links.length === 0 && <Styled.SubHeader>No links yet</Styled.SubHeader>}\n </Styled.LinksList>\n <AddNewLinks\n targetEntityType={targetEntityType}\n projectName={projectName}\n onClose={onClose}\n onAdd={(id) => linksUpdater.add([{ targetEntityId: id, linkId: getEntityId() }])}\n onSearchTypeChange={setSearchType}\n />\n </Styled.Container>\n {searchType === 'picker' && (\n <EntityPickerDialog\n onClose={() => setSearchType(null)}\n projectName={projectName}\n entityType={targetEntityType as PickerEntityType} // the type of entity to pick\n initialSelection={folderId ? { folder: { [folderId]: true } } : undefined} // preselect current folder\n onSubmit={(s) =>\n linksUpdater.add(s.map((id) => ({ targetEntityId: id, linkId: getEntityId() })))\n }\n isMultiSelect\n />\n )}\n </>\n )\n}\n"],"names":["LinksManager","linkTypeLabel","direction","links","projectName","entityId","entityType","linkType","targetEntityType","folderId","selectedEntityIds","onClose","onEntityClick","user","useGlobalContext","isManager","linksUpdater","useUpdateLinks","searchType","setSearchType","useState","handleRemove","e","link","jsxs","Fragment","Styled.Container","Styled.Header","upperFirst","jsx","Button","Styled.LinksList","LinkManagerItem","Styled.SubHeader","AddNewLinks","id","getEntityId","EntityPickerDialog","s"],"mappings":"22CAoCO,MAAMA,EAAsC,CAAC,CAClD,cAAAC,EACA,UAAAC,EACA,MAAAC,EAAQ,CAAA,EACR,YAAAC,EACA,SAAAC,EACA,WAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,SAAAC,EACA,kBAAAC,EAAoB,CAAA,EACpB,QAAAC,EACA,cAAAC,CACF,IAAM,CACJ,KAAM,CAAE,KAAAC,CAAA,EAASC,mBAAA,EACXC,EAAYF,GAAM,MAAM,SAAWA,GAAM,MAAM,UAE/CG,EAAeC,EAAe,CAClC,YAAAb,EACA,UAAAF,EACA,SAAAG,EACA,WAAAC,EACA,iBAAAE,EACA,SAAAD,CAAA,CACD,EAEK,CAACW,EAAYC,CAAa,EAAIC,EAAAA,SAAyB,IAAI,EAE3DC,EAAe,CAACC,EAAwCC,IAAqB,CAEjFD,EAAE,gBAAA,EAEFN,EAAa,OAAO,CAClB,CACE,GAAIO,EAAK,OACT,OAAQ,CAAE,SAAUA,EAAK,SAAU,WAAYA,EAAK,UAAA,CAAW,CACjE,CACD,CACH,EAEA,OACEC,EAAAA,kBAAAA,KAAAC,6BAAA,CACE,SAAA,CAAAD,yBAACE,EAAAA,UAAA,CACC,SAAA,CAAAF,yBAACG,EAAAA,OAAA,CACE,SAAA,CAAAC,EAAAA,WAAW3B,CAAa,EAAE,WAASC,EAAU,IAC9C2B,EAAAA,kBAAAA,IAACC,EAAAA,OAAA,CACC,KAAM,QACN,QAAQ,OACR,UAAU,SACV,QAASnB,EACT,gBAAe,SACf,qBAAoB,GAAA,CAAA,CACtB,EACF,EACAa,yBAACO,EAAAA,UAAA,CACE,SAAA,CAAA5B,GAAO,IAAKoB,GACXM,EAAAA,kBAAAA,IAACG,EAAAA,gBAAA,CAEC,KAAAT,EACA,WAAYb,EAAkB,SAASa,EAAK,QAAQ,EACpD,cAAAX,EACA,SAAUS,EACV,UAAAN,CAAA,EALKQ,EAAK,MAAA,CAOb,EACApB,EAAM,SAAW,2BAAM8B,EAAAA,UAAA,CAAiB,SAAA,cAAA,CAAY,CAAA,EACvD,EACAJ,EAAAA,kBAAAA,IAACK,EAAA,CACC,iBAAA1B,EACA,YAAAJ,EACA,QAAAO,EACA,MAAQwB,GAAOnB,EAAa,IAAI,CAAC,CAAE,eAAgBmB,EAAI,OAAQC,EAAAA,YAAA,CAAY,CAAG,CAAC,EAC/E,mBAAoBjB,CAAA,CAAA,CACtB,EACF,EACCD,IAAe,UACdW,EAAAA,kBAAAA,IAACQ,EAAAA,mBAAA,CACC,QAAS,IAAMlB,EAAc,IAAI,EACjC,YAAAf,EACA,WAAYI,EACZ,iBAAkBC,EAAW,CAAE,OAAQ,CAAE,CAACA,CAAQ,EAAG,EAAA,CAAK,EAAM,OAChE,SAAW6B,GACTtB,EAAa,IAAIsB,EAAE,IAAKH,IAAQ,CAAE,eAAgBA,EAAI,OAAQC,EAAAA,YAAA,CAAY,EAAI,CAAC,EAEjF,cAAa,EAAA,CAAA,CACf,EAEJ,CAEJ"}
|
|
@@ -1,101 +1,119 @@
|
|
|
1
1
|
import { j as t } from "../../../../_virtual/jsx-runtime.es.js";
|
|
2
|
-
import { useState as
|
|
3
|
-
import { Container as
|
|
2
|
+
import { useState as S } from "react";
|
|
3
|
+
import { Container as v, Header as L, LinksList as M, SubHeader as C } from "./LinksManager.styled.es.js";
|
|
4
4
|
import { upperFirst as E } from "lodash";
|
|
5
5
|
import "react-toastify";
|
|
6
|
-
import { getEntityId as
|
|
6
|
+
import { getEntityId as c } from "../../util/getEntityId.es.js";
|
|
7
7
|
import "../../util/pubsub.es.js";
|
|
8
8
|
import T from "./hooks/useUpdateLinks.es.js";
|
|
9
|
-
import
|
|
10
|
-
import { EntityPickerDialog as
|
|
9
|
+
import b from "./AddNewLinks.es.js";
|
|
10
|
+
import { EntityPickerDialog as A } from "../../containers/EntityPickerDialog/EntityPickerDialog.es.js";
|
|
11
11
|
import { LinkManagerItem as R } from "./LinkManagerItem.es.js";
|
|
12
|
-
import { Button as
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
import { Button as F } from "@ynput/ayon-react-components";
|
|
13
|
+
import "../../context/RemoteModulesContext.es.js";
|
|
14
|
+
import "../../context/DetailsPanelContext.es.js";
|
|
15
|
+
import "../../context/ThumbnailUploaderContext.es.js";
|
|
16
|
+
import "../../context/SettingsPanelContext.es.js";
|
|
17
|
+
import "../../context/pip/PiPProvider.es.js";
|
|
18
|
+
import "react-dom";
|
|
19
|
+
import "../../context/pip/PiPWrapper.es.js";
|
|
20
|
+
import "../../context/AddonProjectContext.es.js";
|
|
21
|
+
import "../../context/AddonContext.es.js";
|
|
22
|
+
import "../../context/PowerpackContext.es.js";
|
|
23
|
+
import "../../context/MoveEntityContext.es.js";
|
|
24
|
+
import "../../context/MenuContext.es.js";
|
|
25
|
+
import "../../context/WebsocketContext.es.js";
|
|
26
|
+
import { useGlobalContext as H } from "../../context/GlobalContext.es.js";
|
|
27
|
+
import "../../context/ProjectContext.es.js";
|
|
28
|
+
import "../../context/ProjectFoldersContext.es.js";
|
|
29
|
+
import "../../context/UriContext.es.js";
|
|
30
|
+
const at = ({
|
|
31
|
+
linkTypeLabel: u,
|
|
32
|
+
direction: m,
|
|
33
|
+
links: s = [],
|
|
34
|
+
projectName: o,
|
|
35
|
+
entityId: x,
|
|
19
36
|
entityType: y,
|
|
20
|
-
linkType:
|
|
21
|
-
targetEntityType:
|
|
22
|
-
folderId:
|
|
23
|
-
selectedEntityIds:
|
|
24
|
-
onClose:
|
|
25
|
-
onEntityClick:
|
|
37
|
+
linkType: h,
|
|
38
|
+
targetEntityType: e,
|
|
39
|
+
folderId: p,
|
|
40
|
+
selectedEntityIds: f = [],
|
|
41
|
+
onClose: a,
|
|
42
|
+
onEntityClick: g
|
|
26
43
|
}) => {
|
|
27
|
-
const n = T({
|
|
28
|
-
projectName:
|
|
29
|
-
direction:
|
|
30
|
-
entityId:
|
|
44
|
+
const { user: d } = H(), k = d?.data?.isAdmin || d?.data?.isManager, n = T({
|
|
45
|
+
projectName: o,
|
|
46
|
+
direction: m,
|
|
47
|
+
entityId: x,
|
|
31
48
|
entityType: y,
|
|
32
|
-
targetEntityType:
|
|
33
|
-
linkType:
|
|
34
|
-
}), [
|
|
35
|
-
|
|
49
|
+
targetEntityType: e,
|
|
50
|
+
linkType: h
|
|
51
|
+
}), [I, l] = S(null), j = (i, r) => {
|
|
52
|
+
i.stopPropagation(), n.remove([
|
|
36
53
|
{
|
|
37
|
-
id:
|
|
38
|
-
target: { entityId:
|
|
54
|
+
id: r.linkId,
|
|
55
|
+
target: { entityId: r.entityId, entityType: r.entityType }
|
|
39
56
|
}
|
|
40
57
|
]);
|
|
41
58
|
};
|
|
42
59
|
return /* @__PURE__ */ t.jsxs(t.Fragment, { children: [
|
|
43
|
-
/* @__PURE__ */ t.jsxs(
|
|
44
|
-
/* @__PURE__ */ t.jsxs(
|
|
45
|
-
E(
|
|
60
|
+
/* @__PURE__ */ t.jsxs(v, { children: [
|
|
61
|
+
/* @__PURE__ */ t.jsxs(L, { children: [
|
|
62
|
+
E(u),
|
|
46
63
|
" links (",
|
|
47
|
-
|
|
64
|
+
m,
|
|
48
65
|
")",
|
|
49
66
|
/* @__PURE__ */ t.jsx(
|
|
50
|
-
|
|
67
|
+
F,
|
|
51
68
|
{
|
|
52
69
|
icon: "close",
|
|
53
70
|
variant: "text",
|
|
54
71
|
className: "remove",
|
|
55
|
-
onClick:
|
|
72
|
+
onClick: a,
|
|
56
73
|
"data-shortcut": "Escape",
|
|
57
74
|
"data-tooltip-delay": 500
|
|
58
75
|
}
|
|
59
76
|
)
|
|
60
77
|
] }),
|
|
61
|
-
/* @__PURE__ */ t.jsxs(
|
|
62
|
-
|
|
78
|
+
/* @__PURE__ */ t.jsxs(M, { children: [
|
|
79
|
+
s?.map((i) => /* @__PURE__ */ t.jsx(
|
|
63
80
|
R,
|
|
64
81
|
{
|
|
65
|
-
link:
|
|
66
|
-
isSelected:
|
|
67
|
-
onEntityClick:
|
|
68
|
-
onRemove:
|
|
82
|
+
link: i,
|
|
83
|
+
isSelected: f.includes(i.entityId),
|
|
84
|
+
onEntityClick: g,
|
|
85
|
+
onRemove: j,
|
|
86
|
+
isManager: k
|
|
69
87
|
},
|
|
70
|
-
|
|
88
|
+
i.linkId
|
|
71
89
|
)),
|
|
72
|
-
|
|
90
|
+
s.length === 0 && /* @__PURE__ */ t.jsx(C, { children: "No links yet" })
|
|
73
91
|
] }),
|
|
74
92
|
/* @__PURE__ */ t.jsx(
|
|
75
|
-
|
|
93
|
+
b,
|
|
76
94
|
{
|
|
77
|
-
targetEntityType:
|
|
78
|
-
projectName:
|
|
79
|
-
onClose:
|
|
80
|
-
onAdd: (
|
|
81
|
-
onSearchTypeChange:
|
|
95
|
+
targetEntityType: e,
|
|
96
|
+
projectName: o,
|
|
97
|
+
onClose: a,
|
|
98
|
+
onAdd: (i) => n.add([{ targetEntityId: i, linkId: c() }]),
|
|
99
|
+
onSearchTypeChange: l
|
|
82
100
|
}
|
|
83
101
|
)
|
|
84
102
|
] }),
|
|
85
|
-
|
|
86
|
-
|
|
103
|
+
I === "picker" && /* @__PURE__ */ t.jsx(
|
|
104
|
+
A,
|
|
87
105
|
{
|
|
88
|
-
onClose: () =>
|
|
89
|
-
projectName:
|
|
90
|
-
entityType:
|
|
91
|
-
initialSelection:
|
|
92
|
-
onSubmit: (
|
|
106
|
+
onClose: () => l(null),
|
|
107
|
+
projectName: o,
|
|
108
|
+
entityType: e,
|
|
109
|
+
initialSelection: p ? { folder: { [p]: !0 } } : void 0,
|
|
110
|
+
onSubmit: (i) => n.add(i.map((r) => ({ targetEntityId: r, linkId: c() }))),
|
|
93
111
|
isMultiSelect: !0
|
|
94
112
|
}
|
|
95
113
|
)
|
|
96
114
|
] });
|
|
97
115
|
};
|
|
98
116
|
export {
|
|
99
|
-
|
|
117
|
+
at as LinksManager
|
|
100
118
|
};
|
|
101
119
|
//# sourceMappingURL=LinksManager.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinksManager.es.js","sources":["../../../../../src/components/LinksManager/LinksManager.tsx"],"sourcesContent":["import { FC, useState } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { getEntityId } from '@shared/util'\nimport useUpdateLinks from './hooks/useUpdateLinks'\nimport AddNewLinks, { LinkSearchType } from './AddNewLinks'\nimport { EntityPickerDialog, PickerEntityType } from '@shared/containers/EntityPickerDialog'\nimport { upperFirst } from 'lodash'\nimport { LinkManagerItem } from './LinkManagerItem'\nimport { Button } from '@ynput/ayon-react-components'\n\nexport type LinkEntity = {\n linkId: string\n entityId: string\n label: string\n parents: string[]\n entityType: string\n icon: string\n isRestricted?: boolean // flag to indicate if this link is restricted (node is null from API)\n}\n\nexport interface LinksManagerProps {\n linkTypeLabel: string\n direction?: 'in' | 'out'\n links: LinkEntity[] // used to display basic info about the links entity\n projectName: string\n entityId: string // the entity id of the entity that has these links\n linkType: string // full link type e.g. workflow|task|task\n entityType: string // the entity type of the entity that has these links\n targetEntityType: string // the entity type of the out links\n folderId?: string | null // the folder selected or the parent folder of the selected (used in EntityPickerDialog)\n selectedEntityIds?: string[] // list of selected entity IDs to highlight\n onClose?: () => void\n onEntityClick?: (entityId: string, entityType: string) => void // a click on an linked entity\n}\n\nexport const LinksManager: FC<LinksManagerProps> = ({\n linkTypeLabel,\n direction,\n links = [],\n projectName,\n entityId,\n entityType,\n linkType,\n targetEntityType,\n folderId,\n selectedEntityIds = [],\n onClose,\n onEntityClick,\n}) => {\n const linksUpdater = useUpdateLinks({\n projectName,\n direction,\n entityId,\n entityType,\n targetEntityType,\n linkType,\n })\n\n const [searchType, setSearchType] = useState<LinkSearchType>(null)\n\n const handleRemove = (e: React.MouseEvent<HTMLButtonElement>, link: LinkEntity) => {\n // prevent clicks higher up\n e.stopPropagation()\n\n linksUpdater.remove([\n {\n id: link.linkId,\n target: { entityId: link.entityId, entityType: link.entityType },\n },\n ])\n }\n\n return (\n <>\n <Styled.Container>\n <Styled.Header>\n {upperFirst(linkTypeLabel)} links ({direction})\n <Button\n icon={'close'}\n variant=\"text\"\n className=\"remove\"\n onClick={onClose}\n data-shortcut={'Escape'}\n data-tooltip-delay={500}\n />\n </Styled.Header>\n <Styled.LinksList>\n {links?.map((link) => (\n <LinkManagerItem\n key={link.linkId}\n link={link}\n isSelected={selectedEntityIds.includes(link.entityId)}\n onEntityClick={onEntityClick}\n onRemove={handleRemove}\n />\n ))}\n {links.length === 0 && <Styled.SubHeader>No links yet</Styled.SubHeader>}\n </Styled.LinksList>\n <AddNewLinks\n targetEntityType={targetEntityType}\n projectName={projectName}\n onClose={onClose}\n onAdd={(id) => linksUpdater.add([{ targetEntityId: id, linkId: getEntityId() }])}\n onSearchTypeChange={setSearchType}\n />\n </Styled.Container>\n {searchType === 'picker' && (\n <EntityPickerDialog\n onClose={() => setSearchType(null)}\n projectName={projectName}\n entityType={targetEntityType as PickerEntityType} // the type of entity to pick\n initialSelection={folderId ? { folder: { [folderId]: true } } : undefined} // preselect current folder\n onSubmit={(s) =>\n linksUpdater.add(s.map((id) => ({ targetEntityId: id, linkId: getEntityId() })))\n }\n isMultiSelect\n />\n )}\n </>\n )\n}\n"],"names":["LinksManager","linkTypeLabel","direction","links","projectName","entityId","entityType","linkType","targetEntityType","folderId","selectedEntityIds","onClose","onEntityClick","linksUpdater","useUpdateLinks","searchType","setSearchType","useState","handleRemove","link","jsxs","Fragment","Styled.Container","Styled.Header","upperFirst","jsx","Button","Styled.LinksList","LinkManagerItem","Styled.SubHeader","AddNewLinks","id","getEntityId","EntityPickerDialog","s"],"mappings":"
|
|
1
|
+
{"version":3,"file":"LinksManager.es.js","sources":["../../../../../src/components/LinksManager/LinksManager.tsx"],"sourcesContent":["import { FC, useState } from 'react'\nimport * as Styled from './LinksManager.styled'\nimport { getEntityId } from '@shared/util'\nimport useUpdateLinks from './hooks/useUpdateLinks'\nimport AddNewLinks, { LinkSearchType } from './AddNewLinks'\nimport { EntityPickerDialog, PickerEntityType } from '@shared/containers/EntityPickerDialog'\nimport { upperFirst } from 'lodash'\nimport { LinkManagerItem } from './LinkManagerItem'\nimport { Button } from '@ynput/ayon-react-components'\nimport { useGlobalContext } from '@shared/context'\n\nexport type LinkEntity = {\n linkId: string\n entityId: string\n label: string\n parents: string[]\n entityType: string\n icon: string\n isRestricted?: boolean // flag to indicate if this link is restricted (node is null from API)\n}\n\nexport interface LinksManagerProps {\n linkTypeLabel: string\n direction?: 'in' | 'out'\n links: LinkEntity[] // used to display basic info about the links entity\n projectName: string\n entityId: string // the entity id of the entity that has these links\n linkType: string // full link type e.g. workflow|task|task\n entityType: string // the entity type of the entity that has these links\n targetEntityType: string // the entity type of the out links\n folderId?: string | null // the folder selected or the parent folder of the selected (used in EntityPickerDialog)\n selectedEntityIds?: string[] // list of selected entity IDs to highlight\n onClose?: () => void\n onEntityClick?: (entityId: string, entityType: string) => void // a click on an linked entity\n}\n\nexport const LinksManager: FC<LinksManagerProps> = ({\n linkTypeLabel,\n direction,\n links = [],\n projectName,\n entityId,\n entityType,\n linkType,\n targetEntityType,\n folderId,\n selectedEntityIds = [],\n onClose,\n onEntityClick,\n}) => {\n const { user } = useGlobalContext()\n const isManager = user?.data?.isAdmin || user?.data?.isManager\n\n const linksUpdater = useUpdateLinks({\n projectName,\n direction,\n entityId,\n entityType,\n targetEntityType,\n linkType,\n })\n\n const [searchType, setSearchType] = useState<LinkSearchType>(null)\n\n const handleRemove = (e: React.MouseEvent<HTMLButtonElement>, link: LinkEntity) => {\n // prevent clicks higher up\n e.stopPropagation()\n\n linksUpdater.remove([\n {\n id: link.linkId,\n target: { entityId: link.entityId, entityType: link.entityType },\n },\n ])\n }\n\n return (\n <>\n <Styled.Container>\n <Styled.Header>\n {upperFirst(linkTypeLabel)} links ({direction})\n <Button\n icon={'close'}\n variant=\"text\"\n className=\"remove\"\n onClick={onClose}\n data-shortcut={'Escape'}\n data-tooltip-delay={500}\n />\n </Styled.Header>\n <Styled.LinksList>\n {links?.map((link) => (\n <LinkManagerItem\n key={link.linkId}\n link={link}\n isSelected={selectedEntityIds.includes(link.entityId)}\n onEntityClick={onEntityClick}\n onRemove={handleRemove}\n isManager={isManager}\n />\n ))}\n {links.length === 0 && <Styled.SubHeader>No links yet</Styled.SubHeader>}\n </Styled.LinksList>\n <AddNewLinks\n targetEntityType={targetEntityType}\n projectName={projectName}\n onClose={onClose}\n onAdd={(id) => linksUpdater.add([{ targetEntityId: id, linkId: getEntityId() }])}\n onSearchTypeChange={setSearchType}\n />\n </Styled.Container>\n {searchType === 'picker' && (\n <EntityPickerDialog\n onClose={() => setSearchType(null)}\n projectName={projectName}\n entityType={targetEntityType as PickerEntityType} // the type of entity to pick\n initialSelection={folderId ? { folder: { [folderId]: true } } : undefined} // preselect current folder\n onSubmit={(s) =>\n linksUpdater.add(s.map((id) => ({ targetEntityId: id, linkId: getEntityId() })))\n }\n isMultiSelect\n />\n )}\n </>\n )\n}\n"],"names":["LinksManager","linkTypeLabel","direction","links","projectName","entityId","entityType","linkType","targetEntityType","folderId","selectedEntityIds","onClose","onEntityClick","user","useGlobalContext","isManager","linksUpdater","useUpdateLinks","searchType","setSearchType","useState","handleRemove","e","link","jsxs","Fragment","Styled.Container","Styled.Header","upperFirst","jsx","Button","Styled.LinksList","LinkManagerItem","Styled.SubHeader","AddNewLinks","id","getEntityId","EntityPickerDialog","s"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,MAAMA,KAAsC,CAAC;AAAA,EAClD,eAAAC;AAAA,EACA,WAAAC;AAAA,EACA,OAAAC,IAAQ,CAAA;AAAA,EACR,aAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,UAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,mBAAAC,IAAoB,CAAA;AAAA,EACpB,SAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACJ,QAAM,EAAE,MAAAC,EAAA,IAASC,EAAA,GACXC,IAAYF,GAAM,MAAM,WAAWA,GAAM,MAAM,WAE/CG,IAAeC,EAAe;AAAA,IAClC,aAAAb;AAAA,IACA,WAAAF;AAAA,IACA,UAAAG;AAAA,IACA,YAAAC;AAAA,IACA,kBAAAE;AAAA,IACA,UAAAD;AAAA,EAAA,CACD,GAEK,CAACW,GAAYC,CAAa,IAAIC,EAAyB,IAAI,GAE3DC,IAAe,CAACC,GAAwCC,MAAqB;AAEjF,IAAAD,EAAE,gBAAA,GAEFN,EAAa,OAAO;AAAA,MAClB;AAAA,QACE,IAAIO,EAAK;AAAA,QACT,QAAQ,EAAE,UAAUA,EAAK,UAAU,YAAYA,EAAK,WAAA;AAAA,MAAW;AAAA,IACjE,CACD;AAAA,EACH;AAEA,SACEC,gBAAAA,EAAAA,KAAAC,YAAA,EACE,UAAA;AAAA,IAAAD,gBAAAA,OAACE,GAAA,EACC,UAAA;AAAA,MAAAF,gBAAAA,OAACG,GAAA,EACE,UAAA;AAAA,QAAAC,EAAW3B,CAAa;AAAA,QAAE;AAAA,QAASC;AAAA,QAAU;AAAA,QAC9C2B,gBAAAA,EAAAA;AAAAA,UAACC;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,SAAQ;AAAA,YACR,WAAU;AAAA,YACV,SAASnB;AAAA,YACT,iBAAe;AAAA,YACf,sBAAoB;AAAA,UAAA;AAAA,QAAA;AAAA,MACtB,GACF;AAAA,MACAa,gBAAAA,OAACO,GAAA,EACE,UAAA;AAAA,QAAA5B,GAAO,IAAI,CAACoB,MACXM,gBAAAA,EAAAA;AAAAA,UAACG;AAAA,UAAA;AAAA,YAEC,MAAAT;AAAA,YACA,YAAYb,EAAkB,SAASa,EAAK,QAAQ;AAAA,YACpD,eAAAX;AAAA,YACA,UAAUS;AAAA,YACV,WAAAN;AAAA,UAAA;AAAA,UALKQ,EAAK;AAAA,QAAA,CAOb;AAAA,QACApB,EAAM,WAAW,2BAAM8B,GAAA,EAAiB,UAAA,eAAA,CAAY;AAAA,MAAA,GACvD;AAAA,MACAJ,gBAAAA,EAAAA;AAAAA,QAACK;AAAA,QAAA;AAAA,UACC,kBAAA1B;AAAA,UACA,aAAAJ;AAAA,UACA,SAAAO;AAAA,UACA,OAAO,CAACwB,MAAOnB,EAAa,IAAI,CAAC,EAAE,gBAAgBmB,GAAI,QAAQC,EAAA,EAAY,CAAG,CAAC;AAAA,UAC/E,oBAAoBjB;AAAA,QAAA;AAAA,MAAA;AAAA,IACtB,GACF;AAAA,IACCD,MAAe,YACdW,gBAAAA,EAAAA;AAAAA,MAACQ;AAAA,MAAA;AAAA,QACC,SAAS,MAAMlB,EAAc,IAAI;AAAA,QACjC,aAAAf;AAAA,QACA,YAAYI;AAAA,QACZ,kBAAkBC,IAAW,EAAE,QAAQ,EAAE,CAACA,CAAQ,GAAG,GAAA,EAAK,IAAM;AAAA,QAChE,UAAU,CAAC6B,MACTtB,EAAa,IAAIsB,EAAE,IAAI,CAACH,OAAQ,EAAE,gBAAgBA,GAAI,QAAQC,EAAA,EAAY,EAAI,CAAC;AAAA,QAEjF,eAAa;AAAA,MAAA;AAAA,IAAA;AAAA,EACf,GAEJ;AAEJ;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinksManager.styled.cjs.js","sources":["../../../../../src/components/LinksManager/LinksManager.styled.ts"],"sourcesContent":["import { Button, InputText } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Container = styled.div`\n padding: var(--padding-m);\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-l);\n display: flex;\n flex-direction: column;\n height: 100%; /* Use height instead of max-height to enforce constraints */\n overflow: hidden;\n flex-grow: 1;\n min-height: 0; /* Allow flex child to shrink below content size */\n`\n\nexport const Header = styled.h4`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n .remove {\n padding: 2px;\n background: none;\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest);\n }\n }\n`\n\nexport const SubHeader = styled.h5`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n\n color: var(--md-sys-color-outline);\n`\n\nexport const LinksList = styled.ul`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n`\n\nexport const LinkItem = styled.li`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n\n /* card styling */\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-m);\n padding: 4px 4px;\n\n &.clickable {\n cursor: pointer;\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n\n &.restricted {\n opacity: 0.5;\n font-style: italic;\n }\n\n &.selected {\n background-color: var(--md-sys-color-primary-container);\n &,\n .icon {\n color: var(--md-sys-color-on-primary-container);\n }\n\n &:hover {\n background-color: var(--md-sys-color-primary-container-hover);\n }\n\n .remove {\n /* show remove icon when selected */\n visibility: visible;\n /* use selected hover */\n &:hover {\n background-color: var(--md-sys-color-on-primary);\n color: var(--md-sys-color-primary);\n }\n }\n }\n\n .title {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--base-gap-small);\n flex: 1;\n }\n\n .path {\n color: var(--md-sys-color-outline);\n }\n\n .label {\n font-weight: bold;\n }\n\n /* show remove icon when hovering item */\n &:hover {\n .remove {\n visibility: visible;\n }\n }\n\n .remove {\n padding: 2px;\n visibility: hidden;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest-hover);\n }\n }\n`\n\nexport const AddLinksContainer = styled.div`\n display: flex;\n flex-direction: column;\n /* hack for search border cutoff */\n padding: 2px;\n margin: -2px;\n padding-top: var(--padding-m);\n flex-shrink: 0; /* Don't shrink this section */\n min-height: 0; /* Allow internal scrolling */\n overflow: hidden; /* Prevent this section from expanding beyond bounds */\n\n /* Set a reasonable max-height that allows for search functionality */\n max-height: 250px;\n`\n\n// wraps the picker and search input\nexport const SearchButtons = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--base-gap-small);\n`\n\nexport const Search = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n padding-top: var(--padding-s);\n\n .input-search {\n position: absolute;\n left: 4px;\n }\n`\n\nexport const PickerButton = styled(Button)`\n min-width: 110px;\n flex: 1;\n width: 100%;\n`\n\nexport const SearchInput = styled(InputText)`\n flex: 1;\n border: none;\n background-color: var(--md-sys-color-surface-container);\n padding-left: 28px;\n width: 100%;\n min-width: 224px;\n`\n\nexport const Error = styled.div`\n color: var(--md-sys-color-error);\n margin-top: var(--base-gap-small);\n`\n\nexport const SearchItems = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow-y: auto;\n padding: var(--padding-m) 0;\n flex: 1; /* Take available space instead of height: 100% */\n min-height: 0; /* Allow shrinking */\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n`\n\nexport const SearchItem = styled.li`\n padding: var(--padding-s);\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n min-height: min-content;\n\n &:hover,\n &:focus,\n &.selected {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n\n &.loading {\n cursor: default;\n opacity: 0.6;\n\n .icon,\n .label,\n .type {\n background-color: var(--md-sys-color-outline);\n color: transparent;\n border-radius: var(--border-radius-s);\n animation: shimmer 1.5s infinite;\n }\n\n .icon {\n width: 16px;\n height: 16px;\n }\n\n .label {\n height: 16px;\n flex: 1;\n }\n\n .type {\n width: 60px;\n height: 14px;\n }\n }\n\n @keyframes shimmer {\n 0% {\n opacity: 0.6;\n }\n 50% {\n opacity: 0.3;\n }\n 100% {\n opacity: 0.6;\n }\n }\n\n .icon {\n flex-shrink: 0;\n }\n\n .label {\n flex: 1;\n display: flex;\n column-gap: var(--base-gap-small);\n flex-wrap: wrap;\n\n & > * {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .type {\n margin-left: 8px;\n color: var(--md-sys-color-outline);\n }\n`\n"],"names":["Container","styled","Header","SubHeader","LinksList","LinkItem","AddLinksContainer","SearchButtons","Search","PickerButton","Button","SearchInput","InputText","Error","SearchItems","SearchItem"],"mappings":"+JAGaA,EAAYC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYnBC,EAASD,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBhBE,EAAYF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnBG,EAAYH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcnBI,EAAWJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"LinksManager.styled.cjs.js","sources":["../../../../../src/components/LinksManager/LinksManager.styled.ts"],"sourcesContent":["import { Button, InputText } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Container = styled.div`\n padding: var(--padding-m);\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-l);\n display: flex;\n flex-direction: column;\n height: 100%; /* Use height instead of max-height to enforce constraints */\n overflow: hidden;\n flex-grow: 1;\n min-height: 0; /* Allow flex child to shrink below content size */\n`\n\nexport const Header = styled.h4`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n .remove {\n padding: 2px;\n background: none;\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest);\n }\n }\n`\n\nexport const SubHeader = styled.h5`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n\n color: var(--md-sys-color-outline);\n`\n\nexport const LinksList = styled.ul`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n`\n\nexport const LinkItem = styled.li`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n\n /* card styling */\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-m);\n padding: 4px 4px;\n\n &.clickable {\n cursor: pointer;\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n\n &.restricted,\n &.unknown {\n opacity: 0.5;\n font-style: italic;\n }\n\n &.selected {\n background-color: var(--md-sys-color-primary-container);\n &,\n .icon {\n color: var(--md-sys-color-on-primary-container);\n }\n\n &:hover {\n background-color: var(--md-sys-color-primary-container-hover);\n }\n\n .remove {\n /* show remove icon when selected */\n visibility: visible;\n /* use selected hover */\n &:hover {\n background-color: var(--md-sys-color-on-primary);\n color: var(--md-sys-color-primary);\n }\n }\n }\n\n .title {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--base-gap-small);\n flex: 1;\n }\n\n .path {\n color: var(--md-sys-color-outline);\n }\n\n .label {\n font-weight: bold;\n }\n\n /* show remove icon when hovering item */\n &:hover {\n .remove {\n visibility: visible;\n }\n }\n\n .remove {\n padding: 2px;\n visibility: hidden;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest-hover);\n }\n }\n`\n\nexport const AddLinksContainer = styled.div`\n display: flex;\n flex-direction: column;\n /* hack for search border cutoff */\n padding: 2px;\n margin: -2px;\n padding-top: var(--padding-m);\n flex-shrink: 0; /* Don't shrink this section */\n min-height: 0; /* Allow internal scrolling */\n overflow: hidden; /* Prevent this section from expanding beyond bounds */\n\n /* Set a reasonable max-height that allows for search functionality */\n max-height: 250px;\n`\n\n// wraps the picker and search input\nexport const SearchButtons = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--base-gap-small);\n`\n\nexport const Search = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n padding-top: var(--padding-s);\n\n .input-search {\n position: absolute;\n left: 4px;\n }\n`\n\nexport const PickerButton = styled(Button)`\n min-width: 110px;\n flex: 1;\n width: 100%;\n`\n\nexport const SearchInput = styled(InputText)`\n flex: 1;\n border: none;\n background-color: var(--md-sys-color-surface-container);\n padding-left: 28px;\n width: 100%;\n min-width: 224px;\n`\n\nexport const Error = styled.div`\n color: var(--md-sys-color-error);\n margin-top: var(--base-gap-small);\n`\n\nexport const SearchItems = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow-y: auto;\n padding: var(--padding-m) 0;\n flex: 1; /* Take available space instead of height: 100% */\n min-height: 0; /* Allow shrinking */\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n`\n\nexport const SearchItem = styled.li`\n padding: var(--padding-s);\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n min-height: min-content;\n\n &:hover,\n &:focus,\n &.selected {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n\n &.loading {\n cursor: default;\n opacity: 0.6;\n\n .icon,\n .label,\n .type {\n background-color: var(--md-sys-color-outline);\n color: transparent;\n border-radius: var(--border-radius-s);\n animation: shimmer 1.5s infinite;\n }\n\n .icon {\n width: 16px;\n height: 16px;\n }\n\n .label {\n height: 16px;\n flex: 1;\n }\n\n .type {\n width: 60px;\n height: 14px;\n }\n }\n\n @keyframes shimmer {\n 0% {\n opacity: 0.6;\n }\n 50% {\n opacity: 0.3;\n }\n 100% {\n opacity: 0.6;\n }\n }\n\n .icon {\n flex-shrink: 0;\n }\n\n .label {\n flex: 1;\n display: flex;\n column-gap: var(--base-gap-small);\n flex-wrap: wrap;\n\n & > * {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .type {\n margin-left: 8px;\n color: var(--md-sys-color-outline);\n }\n`\n"],"names":["Container","styled","Header","SubHeader","LinksList","LinkItem","AddLinksContainer","SearchButtons","Search","PickerButton","Button","SearchInput","InputText","Error","SearchItems","SearchItem"],"mappings":"+JAGaA,EAAYC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYnBC,EAASD,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBhBE,EAAYF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnBG,EAAYH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcnBI,EAAWJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmFlBK,EAAoBL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgB3BM,EAAgBN,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvBO,EAASP,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAchBQ,EAAeR,EAAOS,QAAM;AAAA;AAAA;AAAA;AAAA,EAM5BC,EAAcV,EAAOW,WAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAS9BC,EAAQZ,EAAO;AAAA;AAAA;AAAA,EAKfa,EAAcb,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAarBc,EAAad,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Button as
|
|
1
|
+
import { Button as o, InputText as r } from "@ynput/ayon-react-components";
|
|
2
2
|
import e from "styled-components";
|
|
3
3
|
const n = e.div`
|
|
4
4
|
padding: var(--padding-m);
|
|
@@ -66,7 +66,8 @@ const n = e.div`
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
&.restricted
|
|
69
|
+
&.restricted,
|
|
70
|
+
&.unknown {
|
|
70
71
|
opacity: 0.5;
|
|
71
72
|
font-style: italic;
|
|
72
73
|
}
|
|
@@ -154,11 +155,11 @@ const n = e.div`
|
|
|
154
155
|
position: absolute;
|
|
155
156
|
left: 4px;
|
|
156
157
|
}
|
|
157
|
-
`, g = e(
|
|
158
|
+
`, g = e(o)`
|
|
158
159
|
min-width: 110px;
|
|
159
160
|
flex: 1;
|
|
160
161
|
width: 100%;
|
|
161
|
-
`, m = e(
|
|
162
|
+
`, m = e(r)`
|
|
162
163
|
flex: 1;
|
|
163
164
|
border: none;
|
|
164
165
|
background-color: var(--md-sys-color-surface-container);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinksManager.styled.es.js","sources":["../../../../../src/components/LinksManager/LinksManager.styled.ts"],"sourcesContent":["import { Button, InputText } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Container = styled.div`\n padding: var(--padding-m);\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-l);\n display: flex;\n flex-direction: column;\n height: 100%; /* Use height instead of max-height to enforce constraints */\n overflow: hidden;\n flex-grow: 1;\n min-height: 0; /* Allow flex child to shrink below content size */\n`\n\nexport const Header = styled.h4`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n .remove {\n padding: 2px;\n background: none;\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest);\n }\n }\n`\n\nexport const SubHeader = styled.h5`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n\n color: var(--md-sys-color-outline);\n`\n\nexport const LinksList = styled.ul`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n`\n\nexport const LinkItem = styled.li`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n\n /* card styling */\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-m);\n padding: 4px 4px;\n\n &.clickable {\n cursor: pointer;\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n\n &.restricted {\n opacity: 0.5;\n font-style: italic;\n }\n\n &.selected {\n background-color: var(--md-sys-color-primary-container);\n &,\n .icon {\n color: var(--md-sys-color-on-primary-container);\n }\n\n &:hover {\n background-color: var(--md-sys-color-primary-container-hover);\n }\n\n .remove {\n /* show remove icon when selected */\n visibility: visible;\n /* use selected hover */\n &:hover {\n background-color: var(--md-sys-color-on-primary);\n color: var(--md-sys-color-primary);\n }\n }\n }\n\n .title {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--base-gap-small);\n flex: 1;\n }\n\n .path {\n color: var(--md-sys-color-outline);\n }\n\n .label {\n font-weight: bold;\n }\n\n /* show remove icon when hovering item */\n &:hover {\n .remove {\n visibility: visible;\n }\n }\n\n .remove {\n padding: 2px;\n visibility: hidden;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest-hover);\n }\n }\n`\n\nexport const AddLinksContainer = styled.div`\n display: flex;\n flex-direction: column;\n /* hack for search border cutoff */\n padding: 2px;\n margin: -2px;\n padding-top: var(--padding-m);\n flex-shrink: 0; /* Don't shrink this section */\n min-height: 0; /* Allow internal scrolling */\n overflow: hidden; /* Prevent this section from expanding beyond bounds */\n\n /* Set a reasonable max-height that allows for search functionality */\n max-height: 250px;\n`\n\n// wraps the picker and search input\nexport const SearchButtons = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--base-gap-small);\n`\n\nexport const Search = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n padding-top: var(--padding-s);\n\n .input-search {\n position: absolute;\n left: 4px;\n }\n`\n\nexport const PickerButton = styled(Button)`\n min-width: 110px;\n flex: 1;\n width: 100%;\n`\n\nexport const SearchInput = styled(InputText)`\n flex: 1;\n border: none;\n background-color: var(--md-sys-color-surface-container);\n padding-left: 28px;\n width: 100%;\n min-width: 224px;\n`\n\nexport const Error = styled.div`\n color: var(--md-sys-color-error);\n margin-top: var(--base-gap-small);\n`\n\nexport const SearchItems = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow-y: auto;\n padding: var(--padding-m) 0;\n flex: 1; /* Take available space instead of height: 100% */\n min-height: 0; /* Allow shrinking */\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n`\n\nexport const SearchItem = styled.li`\n padding: var(--padding-s);\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n min-height: min-content;\n\n &:hover,\n &:focus,\n &.selected {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n\n &.loading {\n cursor: default;\n opacity: 0.6;\n\n .icon,\n .label,\n .type {\n background-color: var(--md-sys-color-outline);\n color: transparent;\n border-radius: var(--border-radius-s);\n animation: shimmer 1.5s infinite;\n }\n\n .icon {\n width: 16px;\n height: 16px;\n }\n\n .label {\n height: 16px;\n flex: 1;\n }\n\n .type {\n width: 60px;\n height: 14px;\n }\n }\n\n @keyframes shimmer {\n 0% {\n opacity: 0.6;\n }\n 50% {\n opacity: 0.3;\n }\n 100% {\n opacity: 0.6;\n }\n }\n\n .icon {\n flex-shrink: 0;\n }\n\n .label {\n flex: 1;\n display: flex;\n column-gap: var(--base-gap-small);\n flex-wrap: wrap;\n\n & > * {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .type {\n margin-left: 8px;\n color: var(--md-sys-color-outline);\n }\n`\n"],"names":["Container","styled","Header","SubHeader","LinksList","LinkItem","AddLinksContainer","SearchButtons","Search","PickerButton","Button","SearchInput","InputText","Error","SearchItems","SearchItem"],"mappings":";;AAGO,MAAMA,IAAYC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYnBC,IAASD,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBhBE,IAAYF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASnBG,IAAYH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAcnBI,IAAWJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"LinksManager.styled.es.js","sources":["../../../../../src/components/LinksManager/LinksManager.styled.ts"],"sourcesContent":["import { Button, InputText } from '@ynput/ayon-react-components'\nimport styled from 'styled-components'\n\nexport const Container = styled.div`\n padding: var(--padding-m);\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-l);\n display: flex;\n flex-direction: column;\n height: 100%; /* Use height instead of max-height to enforce constraints */\n overflow: hidden;\n flex-grow: 1;\n min-height: 0; /* Allow flex child to shrink below content size */\n`\n\nexport const Header = styled.h4`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n .remove {\n padding: 2px;\n background: none;\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest);\n }\n }\n`\n\nexport const SubHeader = styled.h5`\n margin: 0;\n padding: 0;\n padding-bottom: var(--padding-s);\n flex-shrink: 0;\n\n color: var(--md-sys-color-outline);\n`\n\nexport const LinksList = styled.ul`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n`\n\nexport const LinkItem = styled.li`\n /* reset any defaults */\n list-style: none;\n padding: 0;\n margin: 0;\n\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n\n /* card styling */\n background-color: var(--md-sys-color-surface-container-high);\n border-radius: var(--border-radius-m);\n padding: 4px 4px;\n\n &.clickable {\n cursor: pointer;\n &:hover {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n }\n\n &.restricted,\n &.unknown {\n opacity: 0.5;\n font-style: italic;\n }\n\n &.selected {\n background-color: var(--md-sys-color-primary-container);\n &,\n .icon {\n color: var(--md-sys-color-on-primary-container);\n }\n\n &:hover {\n background-color: var(--md-sys-color-primary-container-hover);\n }\n\n .remove {\n /* show remove icon when selected */\n visibility: visible;\n /* use selected hover */\n &:hover {\n background-color: var(--md-sys-color-on-primary);\n color: var(--md-sys-color-primary);\n }\n }\n }\n\n .title {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--base-gap-small);\n flex: 1;\n }\n\n .path {\n color: var(--md-sys-color-outline);\n }\n\n .label {\n font-weight: bold;\n }\n\n /* show remove icon when hovering item */\n &:hover {\n .remove {\n visibility: visible;\n }\n }\n\n .remove {\n padding: 2px;\n visibility: hidden;\n\n &:hover {\n background-color: var(--md-sys-color-surface-container-highest-hover);\n }\n }\n`\n\nexport const AddLinksContainer = styled.div`\n display: flex;\n flex-direction: column;\n /* hack for search border cutoff */\n padding: 2px;\n margin: -2px;\n padding-top: var(--padding-m);\n flex-shrink: 0; /* Don't shrink this section */\n min-height: 0; /* Allow internal scrolling */\n overflow: hidden; /* Prevent this section from expanding beyond bounds */\n\n /* Set a reasonable max-height that allows for search functionality */\n max-height: 250px;\n`\n\n// wraps the picker and search input\nexport const SearchButtons = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: var(--base-gap-small);\n`\n\nexport const Search = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n padding-top: var(--padding-s);\n\n .input-search {\n position: absolute;\n left: 4px;\n }\n`\n\nexport const PickerButton = styled(Button)`\n min-width: 110px;\n flex: 1;\n width: 100%;\n`\n\nexport const SearchInput = styled(InputText)`\n flex: 1;\n border: none;\n background-color: var(--md-sys-color-surface-container);\n padding-left: 28px;\n width: 100%;\n min-width: 224px;\n`\n\nexport const Error = styled.div`\n color: var(--md-sys-color-error);\n margin-top: var(--base-gap-small);\n`\n\nexport const SearchItems = styled.ul`\n list-style: none;\n padding: 0;\n margin: 0;\n overflow-y: auto;\n padding: var(--padding-m) 0;\n flex: 1; /* Take available space instead of height: 100% */\n min-height: 0; /* Allow shrinking */\n display: flex;\n flex-direction: column;\n gap: var(--base-gap-small);\n`\n\nexport const SearchItem = styled.li`\n padding: var(--padding-s);\n display: flex;\n align-items: center;\n gap: var(--base-gap-small);\n border-radius: var(--border-radius-m);\n cursor: pointer;\n overflow: hidden;\n min-height: min-content;\n\n &:hover,\n &:focus,\n &.selected {\n background-color: var(--md-sys-color-surface-container-high-hover);\n }\n\n &.loading {\n cursor: default;\n opacity: 0.6;\n\n .icon,\n .label,\n .type {\n background-color: var(--md-sys-color-outline);\n color: transparent;\n border-radius: var(--border-radius-s);\n animation: shimmer 1.5s infinite;\n }\n\n .icon {\n width: 16px;\n height: 16px;\n }\n\n .label {\n height: 16px;\n flex: 1;\n }\n\n .type {\n width: 60px;\n height: 14px;\n }\n }\n\n @keyframes shimmer {\n 0% {\n opacity: 0.6;\n }\n 50% {\n opacity: 0.3;\n }\n 100% {\n opacity: 0.6;\n }\n }\n\n .icon {\n flex-shrink: 0;\n }\n\n .label {\n flex: 1;\n display: flex;\n column-gap: var(--base-gap-small);\n flex-wrap: wrap;\n\n & > * {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .type {\n margin-left: 8px;\n color: var(--md-sys-color-outline);\n }\n`\n"],"names":["Container","styled","Header","SubHeader","LinksList","LinkItem","AddLinksContainer","SearchButtons","Search","PickerButton","Button","SearchInput","InputText","Error","SearchItems","SearchItem"],"mappings":";;AAGO,MAAMA,IAAYC,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAYnBC,IAASD,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiBhBE,IAAYF,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GASnBG,IAAYH,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAcnBI,IAAWJ,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAmFlBK,IAAoBL,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAgB3BM,IAAgBN,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,GAOvBO,IAASP,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAchBQ,IAAeR,EAAOS,CAAM;AAAA;AAAA;AAAA;AAAA,GAM5BC,IAAcV,EAAOW,CAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAS9BC,IAAQZ,EAAO;AAAA;AAAA;AAAA,GAKfa,IAAcb,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAarBc,IAAad,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../../../../_virtual/jsx-runtime.cjs.js"),m=require("react"),ie=require("./components/ActivityItem.cjs.js"),se=require("./components/CommentInput/CommentInput.cjs.js"),I=require("./Feed.styled.cjs.js"),oe=require("./hooks/useCommentMutations.cjs.js"),re=require("./hooks/useTransformActivities.cjs.js"),ae=require("../../../../node_modules/react-intersection-observer/dist/index.cjs.js"),le=require("./hooks/useSaveScrollPos.cjs.js"),ce=require("./hooks/useScrollOnInputOpen.cjs.js"),de=require("./feedHelpers.cjs.js");require("@ynput/ayon-react-components");const ue=require("clsx"),me=require("./hooks/useScrollToHighlighted.cjs.js"),pe=require("./components/FileUploadPreview/FileUploadPreview.cjs.js"),ge=require("../../components/EmptyPlaceholder/EmptyPlaceholder.cjs.js");require("../../components/EmptyPlaceholder/EmptyPlaceholderFlex.styled.cjs.js");const h=require("./context/FeedContext.cjs.js");require("../../context/RemoteModulesContext.cjs.js");const xe=require("../../context/DetailsPanelContext.cjs.js");require("../../context/ThumbnailUploaderContext.cjs.js");require("../../context/SettingsPanelContext.cjs.js");require("../../context/pip/PiPProvider.cjs.js");require("react-dom");require("../../context/pip/PiPWrapper.cjs.js");require("../../context/AddonProjectContext.cjs.js");require("../../context/AddonContext.cjs.js");require("../../context/PowerpackContext.cjs.js");require("../../context/MoveEntityContext.cjs.js");require("../../context/MenuContext.cjs.js");require("../../context/WebsocketContext.cjs.js");require("../../context/GlobalContext.cjs.js");require("../../context/ProjectContext.cjs.js");require("../../context/ProjectFoldersContext.cjs.js");require("../../context/UriContext.cjs.js");const he=require("./helpers/mergeAnnotationAttachments.cjs.js"),fe=30,qe=({disabled:A,readOnly:L,statuses:S=[],entityListId:D,isSlideOut:_})=>{const{projectName:a,entities:l,entityType:p,editingId:j,projectInfo:M,setEditingId:w,userName:B,activitiesData:f,isLoadingNew:c,isLoadingNextPage:k,loadNextPage:d,hasNextPage:H,users:W,currentTab:u}=h.useFeedContext(),{openSlideOut:U,highlightedActivities:q,setHighlightedActivities:V,onOpenImage:z,setFeedAnnotations:F}=xe.useDetailsPanelContext(),G=["versions"].includes(u),g=m.useMemo(()=>he(f),[f]);m.useEffect(()=>{g.length||F([]);const n=g.map(e=>e.activityData?.annotations?.map(t=>({...t,activityId:e.activityId}))).filter(Boolean).flat();F(n)},[g]);const y=re.default(g,W,M,p,B),r=m.useRef(null);ce({feedRef:r,isInputOpen:j===h.FEED_NEW_COMMENT,height:93}),le({entities:l,feedRef:r,filter:u,disabled:!!q.length,isLoading:c}),me({feedRef:r,highlighted:q,isLoading:c||k,loadNextPage:d,hasNextPage:!!d,activities:f});const{submitComment:N,updateComment:R,deleteComment:J,isSaving:K}=oe({projectName:a,entityType:p,entities:l,filter:u,entityListId:D}),Q=m.useCallback(async(n,e=[],t={})=>{await N(n,e,t),r.current&&r.current.scrollTo({top:0})},[N,r]),X=(n,e)=>{const t=n?.target;if(!t||!e)return console.log("no target or activity");const i=t.checked,s=i?"[ ]":"[x]",ee=i?"[x]":"[ ]",{body:x}=e,T=Array.from(t.closest(".comment-body")?.querySelectorAll(".task-list-item")||[]).findIndex(v=>v===t.closest("li"));let b=T;(x.match(/\[.\]/g)||[]).forEach((v,ne)=>{v!==s&&ne<T&&b--});const O=[];let C=-1;for(;(C=x.indexOf(s,C+1))>-1;)O.push(C);const E=O[b];if(E===void 0)return;const te=E+s.length,P=x.slice(0,E)+ee+x.slice(te);P&&R(e,P,e.files)},Y=n=>{const{entityId:e,entityType:t,activityId:i}=n;if(!t||!["version","task","folder"].includes(t))return console.log("Entity type not supported yet");if(!e||!t||!a)return console.log("No entity id or type found");U({entityId:e,entityType:t,projectName:a}),V([i])},Z=({index:n,activityId:e})=>{const t=Object.values(y).reverse().filter(i=>i.activityType=="comment").map(i=>({id:i.activityId,files:i.files.filter(s=>pe.isFilePreviewable(s.mime,s.ext))})).filter(i=>i.files.length>0);z?.({files:t,activityId:e,index:n,projectName:a})},$=m.useMemo(()=>de.getLoadingPlaceholders(10),[]);return o.jsxRuntimeExports.jsx(o.jsxRuntimeExports.Fragment,{children:o.jsxRuntimeExports.jsxs(I.FeedContainer,{className:"feed",children:[void 0,o.jsxRuntimeExports.jsxs(I.FeedContent,{ref:r,className:ue({loading:c},"no-shimmer"),children:[c?$:y.map(n=>o.jsxRuntimeExports.jsx(ie,{activity:n,onCheckChange:X,onDelete:J,onUpdate:async(e,t,i,s)=>await R(n,e,t,s),projectInfo:M,projectName:a,entityType:p,onReferenceClick:Y,createdAts:l.map(e=>e.createdAt),onFileExpand:Z,showOrigin:l.length>1,filter:u,editProps:{projectName:a,entities:l,entityType:p},isHighlighted:q.includes(n.activityId),readOnly:L,statuses:S,isSlideOut:_},n.activityId)),y.length===1&&u==="versions"&&!c&&o.jsxRuntimeExports.jsx(ge.EmptyPlaceholder,{message:"No versions published yet",icon:"layers"}),H&&d&&o.jsxRuntimeExports.jsx(ae.InView,{root:r.current,onChange:n=>n&&d(),rootMargin:"400px 0px 0px 0px",children:o.jsxRuntimeExports.jsx(I.LoadMore,{style:{height:0},onClick:()=>d(),children:k?"Loading more...":"Click to load more"})})]}),!G&&o.jsxRuntimeExports.jsx(se.default,{initValue:null,onSubmit:Q,isOpen:j===h.FEED_NEW_COMMENT,onClose:()=>w(null),onOpen:()=>w(h.FEED_NEW_COMMENT),disabled:A,isLoading:c||!l.length||K})]})})};exports.Feed=qe;exports.activitiesLast=fe;
|
|
2
2
|
//# sourceMappingURL=Feed.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Feed.cjs.js","sources":["../../../../../src/containers/Feed/Feed.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef } from 'react'\nimport ActivityItem from './components/ActivityItem'\nimport CommentInput from './components/CommentInput/CommentInput'\nimport * as Styled from './Feed.styled'\nimport useCommentMutations, { Activity } from './hooks/useCommentMutations'\nimport useTransformActivities from './hooks/useTransformActivities'\nimport { InView } from 'react-intersection-observer'\nimport useSaveScrollPos from './hooks/useSaveScrollPos'\nimport useScrollOnInputOpen from './hooks/useScrollOnInputOpen'\nimport { getLoadingPlaceholders } from './feedHelpers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport useScrollToHighlighted from './hooks/useScrollToHighlighted'\nimport { isFilePreviewable } from './components/FileUploadPreview/FileUploadPreview'\nimport EmptyPlaceholder from '@shared/components/EmptyPlaceholder'\nimport { useFeedContext, FEED_NEW_COMMENT } from './context/FeedContext'\nimport { Status } from '../ProjectTreeTable/types/project'\nimport { useDetailsPanelContext } from '@shared/context'\nimport { DetailsPanelEntityType } from '@shared/api'\nimport mergeAnnotationAttachments from './helpers/mergeAnnotationAttachments'\nimport { SavedAnnotationMetadata } from '.'\n\n// number of activities to get\nexport const activitiesLast = 30\n\nexport type FeedProps = {\n disabled?: boolean\n readOnly: boolean\n statuses: Status[]\n entityListId?: string | undefined\n isSlideOut?: boolean\n}\n\nexport const Feed = ({\n disabled,\n readOnly,\n statuses = [],\n entityListId,\n isSlideOut,\n}: FeedProps) => {\n const {\n projectName,\n entities,\n entityType,\n editingId,\n projectInfo,\n setEditingId,\n userName,\n activitiesData,\n isLoadingNew,\n isLoadingNextPage,\n loadNextPage,\n hasNextPage,\n users,\n currentTab,\n } = useFeedContext()\n\n const {\n openSlideOut,\n highlightedActivities,\n setHighlightedActivities,\n onOpenImage,\n setFeedAnnotations,\n } = useDetailsPanelContext()\n\n // hide comment input for specific filters\n const hideCommentInput = ['versions'].includes(currentTab)\n\n const activitiesWithMergedAnnotations = useMemo(\n () => mergeAnnotationAttachments(activitiesData),\n [activitiesData],\n )\n\n useEffect(() => {\n if (!activitiesWithMergedAnnotations.length) {\n setFeedAnnotations([])\n }\n\n const annotations = activitiesWithMergedAnnotations\n .map((activity) =>\n activity.activityData?.annotations?.map((a: SavedAnnotationMetadata) => ({\n ...a,\n activityId: activity.activityId,\n })),\n )\n .filter(Boolean)\n .flat()\n\n setFeedAnnotations(annotations)\n }, [activitiesWithMergedAnnotations])\n\n // do any transformation on activities data\n // 1. status change activities, attach status data based on projectName\n // 2. reverse the order\n // 3. is this activity from the current user?\n const transformedActivitiesData = useTransformActivities(\n // @ts-ignore\n activitiesWithMergedAnnotations,\n users,\n projectInfo,\n entityType,\n userName,\n ) as any[]\n\n // REFS\n const feedRef = useRef(null)\n // const commentInputRef = useRef(null)\n\n // scroll by height of comment input when it opens or closes\n useScrollOnInputOpen({ feedRef, isInputOpen: editingId === FEED_NEW_COMMENT, height: 93 })\n\n // save scroll position of a feed\n useSaveScrollPos({\n entities,\n feedRef,\n filter: currentTab,\n disabled: !!highlightedActivities.length,\n isLoading: isLoadingNew,\n })\n // try and scroll to highlightedActivities activity\n useScrollToHighlighted({\n feedRef,\n highlighted: highlightedActivities,\n isLoading: isLoadingNew || isLoadingNextPage,\n loadNextPage,\n hasNextPage: !!loadNextPage,\n activities: activitiesData,\n })\n\n // comment mutations here!\n const { submitComment, updateComment, deleteComment, isSaving } = useCommentMutations({\n projectName,\n entityType: entityType,\n entities,\n filter: currentTab,\n entityListId,\n })\n\n // When a checkbox is clicked, update the body to add/remove \"x\" in [ ] markdown\n // Then update comment with new body\n const handleCommentChecked = (e: React.ChangeEvent<HTMLInputElement>, activity: Activity) => {\n const target = e?.target\n if (!target || !activity) return console.log('no target or activity')\n\n // the value that it's changing to\n const checked: boolean = target.checked\n const currentMarkdown: string = checked ? '[ ]' : '[x]'\n const newMarkdown: string = checked ? '[x]' : '[ ]'\n\n const { body } = activity\n\n // based on all li elements in the whole className 'comment-body' with className 'task-list-item'\n // find the index of the task that was checked\n const taskIndex: number = Array.from(\n target.closest('.comment-body')?.querySelectorAll('.task-list-item') || [],\n ).findIndex((li: Element) => li === target.closest('li'))\n\n let replaceIndex: number = taskIndex\n\n // count the number of current markdowns in the body\n const allMarkdowns: string[] = body.match(/\\[.\\]/g) || []\n\n allMarkdowns.forEach((markdown: string, index: number) => {\n // does it match the current markdown?\n if (markdown !== currentMarkdown && index < taskIndex) replaceIndex--\n })\n\n // now find the indexes of the current markdown to replace\n const indexesOfCurrentMarkdownInBody: number[] = []\n let index: number = -1\n while ((index = body.indexOf(currentMarkdown, index + 1)) > -1) {\n indexesOfCurrentMarkdownInBody.push(index)\n }\n\n const indexToReplaceInBody: number | undefined = indexesOfCurrentMarkdownInBody[replaceIndex]\n if (indexToReplaceInBody === undefined) return\n\n const endReplaceIndex: number = indexToReplaceInBody + currentMarkdown.length\n\n // replace the current markdown with the new markdown\n const newBody: string =\n body.slice(0, indexToReplaceInBody) + newMarkdown + body.slice(endReplaceIndex)\n\n if (!newBody) return\n\n updateComment(activity, newBody, activity.files)\n }\n\n const handleRefClick = (ref: {\n entityId: string\n entityType: DetailsPanelEntityType\n activityId: string\n }) => {\n const { entityId, entityType, activityId } = ref\n const supportedTypes = ['version', 'task', 'folder']\n\n if (!entityType || !supportedTypes.includes(entityType))\n return console.log('Entity type not supported yet')\n\n if (!entityId || !entityType || !projectName) return console.log('No entity id or type found')\n\n // open the slide out\n openSlideOut({ entityId, entityType, projectName })\n // set highlighted activity\n setHighlightedActivities([activityId])\n }\n\n const handleFileExpand = ({ index, activityId }: { index: number; activityId: string }) => {\n const previewableFiles = Object.values(transformedActivitiesData)\n .reverse()\n .filter((a) => a.activityType == 'comment')\n .map((a) => ({\n id: a.activityId,\n files: a.files.filter((file: any) => isFilePreviewable(file.mime, file.ext)),\n }))\n .filter((a) => a.files.length > 0)\n\n // open image callback\n onOpenImage?.({ files: previewableFiles, activityId, index, projectName })\n }\n\n const loadingPlaceholders = useMemo(() => getLoadingPlaceholders(10), [])\n\n let warningMessage\n\n return (\n <>\n <Styled.FeedContainer className=\"feed\">\n {warningMessage && (\n <Styled.Warning>\n <Icon icon=\"info\" />\n {warningMessage}\n </Styled.Warning>\n )}\n <Styled.FeedContent ref={feedRef} className={clsx({ loading: isLoadingNew }, 'no-shimmer')}>\n {isLoadingNew\n ? loadingPlaceholders\n : transformedActivitiesData.map((activity) => (\n <ActivityItem\n key={activity.activityId}\n activity={activity}\n onCheckChange={handleCommentChecked}\n onDelete={deleteComment}\n onUpdate={async (value, files, _refs, data) =>\n await updateComment(activity, value, files, data)\n }\n projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={handleRefClick}\n createdAts={entities.map((e) => e.createdAt)}\n onFileExpand={handleFileExpand}\n showOrigin={entities.length > 1}\n filter={currentTab}\n editProps={{\n projectName,\n entities: entities,\n entityType,\n }}\n isHighlighted={highlightedActivities.includes(activity.activityId)}\n readOnly={readOnly}\n statuses={statuses}\n isSlideOut={isSlideOut}\n />\n ))}\n {/* message when no versions published */}\n {transformedActivitiesData.length === 1 && currentTab === 'versions' && !isLoadingNew && (\n <EmptyPlaceholder message=\"No versions published yet\" icon=\"layers\" />\n )}\n {hasNextPage && loadNextPage && (\n <InView\n root={feedRef.current}\n onChange={(inView) => inView && loadNextPage()}\n rootMargin={'400px 0px 0px 0px'}\n >\n <Styled.LoadMore style={{ height: 0 }} onClick={() => loadNextPage()}>\n {isLoadingNextPage ? 'Loading more...' : 'Click to load more'}\n </Styled.LoadMore>\n </InView>\n )}\n </Styled.FeedContent>\n {!hideCommentInput && (\n <CommentInput\n initValue={null}\n onSubmit={submitComment}\n isOpen={editingId === FEED_NEW_COMMENT}\n onClose={() => setEditingId(null)}\n onOpen={() => setEditingId(FEED_NEW_COMMENT)}\n disabled={disabled}\n isLoading={isLoadingNew || !entities.length || isSaving}\n />\n )}\n </Styled.FeedContainer>\n </>\n )\n}\n"],"names":["activitiesLast","Feed","disabled","readOnly","statuses","entityListId","isSlideOut","projectName","entities","entityType","editingId","projectInfo","setEditingId","userName","activitiesData","isLoadingNew","isLoadingNextPage","loadNextPage","hasNextPage","users","currentTab","useFeedContext","openSlideOut","highlightedActivities","setHighlightedActivities","onOpenImage","setFeedAnnotations","useDetailsPanelContext","hideCommentInput","activitiesWithMergedAnnotations","useMemo","mergeAnnotationAttachments","useEffect","annotations","activity","a","transformedActivitiesData","useTransformActivities","feedRef","useRef","useScrollOnInputOpen","FEED_NEW_COMMENT","useSaveScrollPos","useScrollToHighlighted","submitComment","updateComment","deleteComment","isSaving","useCommentMutations","handleCommentChecked","e","target","checked","currentMarkdown","newMarkdown","body","taskIndex","li","replaceIndex","markdown","index","indexesOfCurrentMarkdownInBody","indexToReplaceInBody","endReplaceIndex","newBody","handleRefClick","ref","entityId","activityId","handleFileExpand","previewableFiles","file","isFilePreviewable","loadingPlaceholders","getLoadingPlaceholders","jsxs","Styled.FeedContainer","Styled.FeedContent","clsx","jsx","ActivityItem","value","files","_refs","data","EmptyPlaceholder","InView","inView","Styled.LoadMore","CommentInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Feed.cjs.js","sources":["../../../../../src/containers/Feed/Feed.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from 'react'\nimport ActivityItem from './components/ActivityItem'\nimport CommentInput from './components/CommentInput/CommentInput'\nimport * as Styled from './Feed.styled'\nimport useCommentMutations, { Activity } from './hooks/useCommentMutations'\nimport useTransformActivities from './hooks/useTransformActivities'\nimport { InView } from 'react-intersection-observer'\nimport useSaveScrollPos from './hooks/useSaveScrollPos'\nimport useScrollOnInputOpen from './hooks/useScrollOnInputOpen'\nimport { getLoadingPlaceholders } from './feedHelpers'\nimport { Icon } from '@ynput/ayon-react-components'\nimport clsx from 'clsx'\nimport useScrollToHighlighted from './hooks/useScrollToHighlighted'\nimport { isFilePreviewable } from './components/FileUploadPreview/FileUploadPreview'\nimport EmptyPlaceholder from '@shared/components/EmptyPlaceholder'\nimport { useFeedContext, FEED_NEW_COMMENT } from './context/FeedContext'\nimport { Status } from '../ProjectTreeTable/types/project'\nimport { useDetailsPanelContext } from '@shared/context'\nimport { DetailsPanelEntityType } from '@shared/api'\nimport mergeAnnotationAttachments from './helpers/mergeAnnotationAttachments'\nimport { SavedAnnotationMetadata } from '.'\n\n// number of activities to get\nexport const activitiesLast = 30\n\nexport type FeedProps = {\n disabled?: boolean\n readOnly: boolean\n statuses: Status[]\n entityListId?: string | undefined\n isSlideOut?: boolean\n}\n\nexport const Feed = ({\n disabled,\n readOnly,\n statuses = [],\n entityListId,\n isSlideOut,\n}: FeedProps) => {\n const {\n projectName,\n entities,\n entityType,\n editingId,\n projectInfo,\n setEditingId,\n userName,\n activitiesData,\n isLoadingNew,\n isLoadingNextPage,\n loadNextPage,\n hasNextPage,\n users,\n currentTab,\n } = useFeedContext()\n\n const {\n openSlideOut,\n highlightedActivities,\n setHighlightedActivities,\n onOpenImage,\n setFeedAnnotations,\n } = useDetailsPanelContext()\n\n // hide comment input for specific filters\n const hideCommentInput = ['versions'].includes(currentTab)\n\n const activitiesWithMergedAnnotations = useMemo(\n () => mergeAnnotationAttachments(activitiesData),\n [activitiesData],\n )\n\n useEffect(() => {\n if (!activitiesWithMergedAnnotations.length) {\n setFeedAnnotations([])\n }\n\n const annotations = activitiesWithMergedAnnotations\n .map((activity) =>\n activity.activityData?.annotations?.map((a: SavedAnnotationMetadata) => ({\n ...a,\n activityId: activity.activityId,\n })),\n )\n .filter(Boolean)\n .flat()\n\n setFeedAnnotations(annotations)\n }, [activitiesWithMergedAnnotations])\n\n // do any transformation on activities data\n // 1. status change activities, attach status data based on projectName\n // 2. reverse the order\n // 3. is this activity from the current user?\n const transformedActivitiesData = useTransformActivities(\n // @ts-ignore\n activitiesWithMergedAnnotations,\n users,\n projectInfo,\n entityType,\n userName,\n ) as any[]\n\n // REFS\n const feedRef = useRef(null)\n // const commentInputRef = useRef(null)\n\n // scroll by height of comment input when it opens or closes\n useScrollOnInputOpen({ feedRef, isInputOpen: editingId === FEED_NEW_COMMENT, height: 93 })\n\n // save scroll position of a feed\n useSaveScrollPos({\n entities,\n feedRef,\n filter: currentTab,\n disabled: !!highlightedActivities.length,\n isLoading: isLoadingNew,\n })\n // try and scroll to highlightedActivities activity\n useScrollToHighlighted({\n feedRef,\n highlighted: highlightedActivities,\n isLoading: isLoadingNew || isLoadingNextPage,\n loadNextPage,\n hasNextPage: !!loadNextPage,\n activities: activitiesData,\n })\n\n // comment mutations here!\n const {\n submitComment: submitCommentMutation,\n updateComment,\n deleteComment,\n isSaving,\n } = useCommentMutations({\n projectName,\n entityType: entityType,\n entities,\n filter: currentTab,\n entityListId,\n })\n\n // wrap submitComment to scroll to bottom\n const submitComment = useCallback(\n async (value: string, files: any[] = [], data: any = {}) => {\n await submitCommentMutation(value, files, data)\n // scroll to bottom (scrollTop 0 is bottom because of column-reverse)\n if (feedRef.current) {\n ;(feedRef.current as any).scrollTo({ top: 0 })\n }\n },\n [submitCommentMutation, feedRef],\n )\n\n // When a checkbox is clicked, update the body to add/remove \"x\" in [ ] markdown\n // Then update comment with new body\n const handleCommentChecked = (e: React.ChangeEvent<HTMLInputElement>, activity: Activity) => {\n const target = e?.target\n if (!target || !activity) return console.log('no target or activity')\n\n // the value that it's changing to\n const checked: boolean = target.checked\n const currentMarkdown: string = checked ? '[ ]' : '[x]'\n const newMarkdown: string = checked ? '[x]' : '[ ]'\n\n const { body } = activity\n\n // based on all li elements in the whole className 'comment-body' with className 'task-list-item'\n // find the index of the task that was checked\n const taskIndex: number = Array.from(\n target.closest('.comment-body')?.querySelectorAll('.task-list-item') || [],\n ).findIndex((li: Element) => li === target.closest('li'))\n\n let replaceIndex: number = taskIndex\n\n // count the number of current markdowns in the body\n const allMarkdowns: string[] = body.match(/\\[.\\]/g) || []\n\n allMarkdowns.forEach((markdown: string, index: number) => {\n // does it match the current markdown?\n if (markdown !== currentMarkdown && index < taskIndex) replaceIndex--\n })\n\n // now find the indexes of the current markdown to replace\n const indexesOfCurrentMarkdownInBody: number[] = []\n let index: number = -1\n while ((index = body.indexOf(currentMarkdown, index + 1)) > -1) {\n indexesOfCurrentMarkdownInBody.push(index)\n }\n\n const indexToReplaceInBody: number | undefined = indexesOfCurrentMarkdownInBody[replaceIndex]\n if (indexToReplaceInBody === undefined) return\n\n const endReplaceIndex: number = indexToReplaceInBody + currentMarkdown.length\n\n // replace the current markdown with the new markdown\n const newBody: string =\n body.slice(0, indexToReplaceInBody) + newMarkdown + body.slice(endReplaceIndex)\n\n if (!newBody) return\n\n updateComment(activity, newBody, activity.files)\n }\n\n const handleRefClick = (ref: {\n entityId: string\n entityType: DetailsPanelEntityType\n activityId: string\n }) => {\n const { entityId, entityType, activityId } = ref\n const supportedTypes = ['version', 'task', 'folder']\n\n if (!entityType || !supportedTypes.includes(entityType))\n return console.log('Entity type not supported yet')\n\n if (!entityId || !entityType || !projectName) return console.log('No entity id or type found')\n\n // open the slide out\n openSlideOut({ entityId, entityType, projectName })\n // set highlighted activity\n setHighlightedActivities([activityId])\n }\n\n const handleFileExpand = ({ index, activityId }: { index: number; activityId: string }) => {\n const previewableFiles = Object.values(transformedActivitiesData)\n .reverse()\n .filter((a) => a.activityType == 'comment')\n .map((a) => ({\n id: a.activityId,\n files: a.files.filter((file: any) => isFilePreviewable(file.mime, file.ext)),\n }))\n .filter((a) => a.files.length > 0)\n\n // open image callback\n onOpenImage?.({ files: previewableFiles, activityId, index, projectName })\n }\n\n const loadingPlaceholders = useMemo(() => getLoadingPlaceholders(10), [])\n\n let warningMessage\n\n return (\n <>\n <Styled.FeedContainer className=\"feed\">\n {warningMessage && (\n <Styled.Warning>\n <Icon icon=\"info\" />\n {warningMessage}\n </Styled.Warning>\n )}\n <Styled.FeedContent ref={feedRef} className={clsx({ loading: isLoadingNew }, 'no-shimmer')}>\n {isLoadingNew\n ? loadingPlaceholders\n : transformedActivitiesData.map((activity) => (\n <ActivityItem\n key={activity.activityId}\n activity={activity}\n onCheckChange={handleCommentChecked}\n onDelete={deleteComment}\n onUpdate={async (value, files, _refs, data) =>\n await updateComment(activity, value, files, data)\n }\n projectInfo={projectInfo}\n projectName={projectName}\n entityType={entityType}\n onReferenceClick={handleRefClick}\n createdAts={entities.map((e) => e.createdAt)}\n onFileExpand={handleFileExpand}\n showOrigin={entities.length > 1}\n filter={currentTab}\n editProps={{\n projectName,\n entities: entities,\n entityType,\n }}\n isHighlighted={highlightedActivities.includes(activity.activityId)}\n readOnly={readOnly}\n statuses={statuses}\n isSlideOut={isSlideOut}\n />\n ))}\n {/* message when no versions published */}\n {transformedActivitiesData.length === 1 && currentTab === 'versions' && !isLoadingNew && (\n <EmptyPlaceholder message=\"No versions published yet\" icon=\"layers\" />\n )}\n {hasNextPage && loadNextPage && (\n <InView\n root={feedRef.current}\n onChange={(inView) => inView && loadNextPage()}\n rootMargin={'400px 0px 0px 0px'}\n >\n <Styled.LoadMore style={{ height: 0 }} onClick={() => loadNextPage()}>\n {isLoadingNextPage ? 'Loading more...' : 'Click to load more'}\n </Styled.LoadMore>\n </InView>\n )}\n </Styled.FeedContent>\n {!hideCommentInput && (\n <CommentInput\n initValue={null}\n onSubmit={submitComment}\n isOpen={editingId === FEED_NEW_COMMENT}\n onClose={() => setEditingId(null)}\n onOpen={() => setEditingId(FEED_NEW_COMMENT)}\n disabled={disabled}\n isLoading={isLoadingNew || !entities.length || isSaving}\n />\n )}\n </Styled.FeedContainer>\n </>\n )\n}\n"],"names":["activitiesLast","Feed","disabled","readOnly","statuses","entityListId","isSlideOut","projectName","entities","entityType","editingId","projectInfo","setEditingId","userName","activitiesData","isLoadingNew","isLoadingNextPage","loadNextPage","hasNextPage","users","currentTab","useFeedContext","openSlideOut","highlightedActivities","setHighlightedActivities","onOpenImage","setFeedAnnotations","useDetailsPanelContext","hideCommentInput","activitiesWithMergedAnnotations","useMemo","mergeAnnotationAttachments","useEffect","annotations","activity","a","transformedActivitiesData","useTransformActivities","feedRef","useRef","useScrollOnInputOpen","FEED_NEW_COMMENT","useSaveScrollPos","useScrollToHighlighted","submitCommentMutation","updateComment","deleteComment","isSaving","useCommentMutations","submitComment","useCallback","value","files","data","handleCommentChecked","e","target","checked","currentMarkdown","newMarkdown","body","taskIndex","li","replaceIndex","markdown","index","indexesOfCurrentMarkdownInBody","indexToReplaceInBody","endReplaceIndex","newBody","handleRefClick","ref","entityId","activityId","handleFileExpand","previewableFiles","file","isFilePreviewable","loadingPlaceholders","getLoadingPlaceholders","jsxs","Styled.FeedContainer","Styled.FeedContent","clsx","jsx","ActivityItem","_refs","EmptyPlaceholder","InView","inView","Styled.LoadMore","CommentInput"],"mappings":"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"}
|