dinocollab-shared 1.2.27 → 1.2.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/action-license/btn.icon.add-to-package.js +1 -1
  2. package/dist/action-license/btn.icon.add-to-package.js.map +1 -1
  3. package/dist/media-right/event-store.js +1 -1
  4. package/dist/media-right/event-store.js.map +1 -1
  5. package/dist/media-right/group-selector/index.js +1 -1
  6. package/dist/media-right/group-selector/index.js.map +1 -1
  7. package/dist/media-right/group-selector/modal-header.js +1 -1
  8. package/dist/media-right/group-selector/modal-header.js.map +1 -1
  9. package/dist/media-right/group-selector/units.js +1 -1
  10. package/dist/media-right/group-selector/units.js.map +1 -1
  11. package/dist/media-right/media-widget/index.js +1 -1
  12. package/dist/media-right/media-widget/index.js.map +1 -1
  13. package/dist/media-right/media-widget/media-list.js +1 -1
  14. package/dist/media-right/media-widget/media-list.js.map +1 -1
  15. package/dist/media-right/media-widget/new-group-area.js +1 -1
  16. package/dist/media-right/media-widget/new-group-area.js.map +1 -1
  17. package/dist/media-right/media-widget/units.js +1 -1
  18. package/dist/media-right/media-widget/units.js.map +1 -1
  19. package/dist/media-right/service.js +1 -1
  20. package/dist/media-right/service.js.map +1 -1
  21. package/dist/media-right/unit.control.js +1 -1
  22. package/dist/media-right/unit.control.js.map +1 -1
  23. package/dist/notification/class.config.js +1 -1
  24. package/dist/notification/class.config.js.map +1 -1
  25. package/dist/notification/hook.js +1 -1
  26. package/dist/notification/hook.js.map +1 -1
  27. package/dist/notification/notify-detail.custom.js +1 -1
  28. package/dist/notification/notify-detail.custom.js.map +1 -1
  29. package/dist/notification/notify-detail.default.js +1 -1
  30. package/dist/notification/notify-detail.default.js.map +1 -1
  31. package/dist/notification/notify-detail.js +1 -1
  32. package/dist/notification/notify-detail.js.map +1 -1
  33. package/dist/notification/notify-list.js +1 -1
  34. package/dist/notification/notify-list.js.map +1 -1
  35. package/dist/notification/styled.js +1 -1
  36. package/dist/notification/styled.js.map +1 -1
  37. package/dist/notification/types.js.map +1 -1
  38. package/dist/notification/widget.js +1 -1
  39. package/dist/notification/widget.js.map +1 -1
  40. package/dist/types/notification/class.config.d.ts +1 -1
  41. package/dist/types/notification/class.config.d.ts.map +1 -1
  42. package/dist/types/notification/hook.d.ts +2 -2
  43. package/dist/types/notification/hook.d.ts.map +1 -1
  44. package/dist/types/notification/index.d.ts +1 -1
  45. package/dist/types/notification/index.d.ts.map +1 -1
  46. package/dist/types/notification/notify-detail.custom.d.ts +1 -3
  47. package/dist/types/notification/notify-detail.custom.d.ts.map +1 -1
  48. package/dist/types/notification/notify-detail.d.ts +11 -4
  49. package/dist/types/notification/notify-detail.d.ts.map +1 -1
  50. package/dist/types/notification/notify-detail.default.d.ts +1 -6
  51. package/dist/types/notification/notify-detail.default.d.ts.map +1 -1
  52. package/dist/types/notification/notify-list.d.ts +2 -0
  53. package/dist/types/notification/notify-list.d.ts.map +1 -1
  54. package/dist/types/notification/styled.d.ts +1 -0
  55. package/dist/types/notification/styled.d.ts.map +1 -1
  56. package/dist/types/notification/types.d.ts +1 -0
  57. package/dist/types/notification/types.d.ts.map +1 -1
  58. package/dist/types/notification/widget.d.ts +4 -3
  59. package/dist/types/notification/widget.d.ts.map +1 -1
  60. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,jsxs as r}from"react/jsx-runtime";import{Tooltip as n,IconButton as i,Stack as e,Button as a,alpha as l,Skeleton as c}from"@mui/material";import u from"@mui/icons-material/BookmarkAddOutlined";import{HelpOutlinePulseIcon as d}from"dinocollab-core/components";var s;!function(t){t.Icon="icon",t.Button="button"}(s||(s={}));var p=function(c){var p=c.product,f=c.buttonProps,b=c.tooltipProps,h=c.helpProps,v=c.kind,k=void 0===v?s.Icon:v,g=c.addToCart;return p?k===s.Button?r(e,{direction:"row",justifyContent:"space-between",alignItems:"center",position:"relative",children:[o(a,t(t({startIcon:o(u,{fontSize:"small"}),fullWidth:!0,type:"submit",variant:"contained",color:"success",onClick:function(){return g(p)}},f),{},{children:"Add to Package"})),o(n,{title:"Read more about our services",placement:"left",children:o(i,t(t({sx:{position:"absolute",right:"-11px",bottom:"-11px",color:function(t){return l(t.palette.primary.main,.8)},backgroundColor:function(t){return t.palette.background.paper},"&:hover":{backgroundColor:function(t){return t.palette.background.paper}}},size:"small",onClick:function(t){return t.stopPropagation()}},h),{},{children:o(d,{})}))})]}):o(n,t(t({title:"Add to Package",arrow:!0,placement:"top"},b),{},{children:o(i,t(t({variant:"contained",color:"inherit",size:"small",onClick:function(){return g(p)}},f),{},{children:o(u,{fontSize:"small",sx:{fontSize:18}})}))})):o(m,{kind:k,buttonProps:f})},m=function(r){var n=r.buttonProps,i=r.kind;return(void 0===i?s.Icon:i)===s.Button?o(c,{variant:"rectangular",width:"100%",height:36,sx:t({borderRadius:2},null==n?void 0:n.sx)}):o(c,{variant:"circular",width:32,height:32,sx:t({},null==n?void 0:n.sx)})};export{p as ButtonIconAddToPackage,m as ButtonIconAddToPackageSkeleton,s as EBtnAddToPackage};
1
+ import{objectSpread2 as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o,jsxs as r}from"react/jsx-runtime";import{Tooltip as n,IconButton as i,Stack as e,Button as a,alpha as l,Skeleton as c}from"@mui/material";import u from"@mui/icons-material/BookmarkAddOutlined";import{HelpOutlinePulseIcon as s}from"dinocollab-core/components";var d;!function(t){t.Icon="icon",t.Button="button"}(d||(d={}));var p=function(c){var p=c.product,f=c.buttonProps,b=c.tooltipProps,h=c.helpProps,v=c.kind,k=void 0===v?d.Icon:v,g=c.addToCart;return p?k===d.Button?r(e,{direction:"row",justifyContent:"space-between",alignItems:"center",position:"relative",children:[o(a,t(t({startIcon:o(u,{fontSize:"small"}),fullWidth:!0,type:"submit",variant:"contained",color:"success",onClick:function(){return g(p)}},f),{},{children:"Add to Playlist"})),o(n,{title:"Read more about our services",placement:"left",children:o(i,t(t({sx:{position:"absolute",right:"-11px",bottom:"-11px",color:function(t){return l(t.palette.primary.main,.8)},backgroundColor:function(t){return t.palette.background.paper},"&:hover":{backgroundColor:function(t){return t.palette.background.paper}}},size:"small",onClick:function(t){return t.stopPropagation()}},h),{},{children:o(s,{})}))})]}):o(n,t(t({title:"Add to Playlist",arrow:!0,placement:"top"},b),{},{children:o(i,t(t({variant:"contained",color:"inherit",size:"small",onClick:function(){return g(p)}},f),{},{children:o(u,{fontSize:"small",sx:{fontSize:18}})}))})):o(m,{kind:k,buttonProps:f})},m=function(r){var n=r.buttonProps,i=r.kind;return(void 0===i?d.Icon:i)===d.Button?o(c,{variant:"rectangular",width:"100%",height:36,sx:t({borderRadius:2},null==n?void 0:n.sx)}):o(c,{variant:"circular",width:32,height:32,sx:t({},null==n?void 0:n.sx)})};export{p as ButtonIconAddToPackage,m as ButtonIconAddToPackageSkeleton,d as EBtnAddToPackage};
2
2
  //# sourceMappingURL=btn.icon.add-to-package.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"btn.icon.add-to-package.js","sources":["../../src/action-license/btn.icon.add-to-package.tsx"],"sourcesContent":["import { Skeleton } from '@mui/material'\r\nimport { alpha, Button, IconButton, Stack, Tooltip } from '@mui/material'\r\nimport BookmarkAddOutlinedIcon from '@mui/icons-material/BookmarkAddOutlined'\r\nimport { HelpOutlinePulseIcon } from 'dinocollab-core/components'\r\nimport type { FC } from 'react'\r\nimport type { ButtonProps, IconButtonProps, TooltipProps } from '@mui/material'\r\n\r\nexport enum EBtnAddToPackage {\r\n Icon = 'icon',\r\n Button = 'button'\r\n}\r\nexport interface BtnIconAddToPackageProps<T> {\r\n product?: T\r\n buttonProps?: ButtonProps\r\n tooltipProps?: Partial<TooltipProps>\r\n helpProps?: Partial<IconButtonProps> & Record<string, any>\r\n kind?: EBtnAddToPackage\r\n addToCart: (item: T) => void\r\n}\r\n\r\nexport const ButtonIconAddToPackage = <T,>({\r\n product,\r\n buttonProps,\r\n tooltipProps,\r\n helpProps,\r\n kind = EBtnAddToPackage.Icon,\r\n addToCart\r\n}: BtnIconAddToPackageProps<T>) => {\r\n if (!product) return <ButtonIconAddToPackageSkeleton kind={kind} buttonProps={buttonProps} />\r\n switch (kind) {\r\n case EBtnAddToPackage.Button:\r\n return (\r\n <Stack direction='row' justifyContent='space-between' alignItems='center' position={'relative'}>\r\n <Button\r\n startIcon={<BookmarkAddOutlinedIcon fontSize='small' />}\r\n fullWidth\r\n type='submit'\r\n variant='contained'\r\n color='success'\r\n onClick={() => addToCart(product)}\r\n {...buttonProps}\r\n >\r\n Add to Package\r\n </Button>\r\n <Tooltip title='Read more about our services' placement='left'>\r\n <IconButton\r\n sx={{\r\n position: 'absolute',\r\n right: '-11px',\r\n bottom: '-11px',\r\n color: (theme) => alpha(theme.palette.primary.main, 0.8),\r\n backgroundColor: (theme) => theme.palette.background.paper,\r\n '&:hover': {\r\n backgroundColor: (theme) => theme.palette.background.paper\r\n }\r\n }}\r\n size='small'\r\n onClick={(e) => e.stopPropagation()}\r\n {...helpProps}\r\n >\r\n <HelpOutlinePulseIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </Stack>\r\n )\r\n default:\r\n return (\r\n <Tooltip title='Add to Package' arrow placement={'top'} {...tooltipProps}>\r\n <IconButton variant='contained' color='inherit' size='small' onClick={() => addToCart(product)} {...buttonProps}>\r\n <BookmarkAddOutlinedIcon fontSize='small' sx={{ fontSize: 18 }} />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n}\r\n\r\n// Skeleton for loading state\r\n\r\ninterface ButtonIconAddToPackageSkeletonProps {\r\n kind?: EBtnAddToPackage\r\n buttonProps?: ButtonProps\r\n}\r\n\r\nexport const ButtonIconAddToPackageSkeleton: FC<ButtonIconAddToPackageSkeletonProps> = ({ buttonProps, kind = EBtnAddToPackage.Icon }) => {\r\n if (kind === EBtnAddToPackage.Button) {\r\n return <Skeleton variant='rectangular' width={'100%'} height={36} sx={{ borderRadius: 2, ...buttonProps?.sx }} />\r\n }\r\n return <Skeleton variant='circular' width={32} height={32} sx={{ ...buttonProps?.sx }} />\r\n}\r\n"],"names":["EBtnAddToPackage","ButtonIconAddToPackage","_ref","product","buttonProps","tooltipProps","helpProps","_ref$kind","kind","Icon","addToCart","Button","_jsxs","Stack","direction","justifyContent","alignItems","position","_jsx","_objectSpread","startIcon","BookmarkAddOutlinedIcon","fontSize","fullWidth","type","variant","color","onClick","children","Tooltip","title","placement","IconButton","sx","right","bottom","theme","alpha","palette","primary","main","backgroundColor","background","paper","size","e","stopPropagation","HelpOutlinePulseIcon","arrow","ButtonIconAddToPackageSkeleton","_ref2","_ref2$kind","Skeleton","width","height","borderRadius"],"mappings":"gWAOYA,GAAZ,SAAYA,GACVA,EAAA,KAAA,OACAA,EAAA,OAAA,QACD,CAHD,CAAYA,IAAAA,EAGX,CAAA,QAUYC,EAAyB,SAAHC,GAOD,IANhCC,EAAOD,EAAPC,QACAC,EAAWF,EAAXE,YACAC,EAAYH,EAAZG,aACAC,EAASJ,EAATI,UAASC,EAAAL,EACTM,KAAAA,OAAI,IAAAD,EAAGP,EAAiBS,KAAIF,EAC5BG,EAASR,EAATQ,UAEA,OAAKP,EACGK,IACDR,EAAiBW,OAElBC,EAACC,EAAK,CAACC,UAAU,MAAMC,eAAe,gBAAgBC,WAAW,SAASC,SAAU,qBAClFC,EAACP,EAAMQ,EAAAA,EAAA,CACLC,UAAWF,EAACG,EAAwB,CAAAC,SAAS,UAC7CC,aACAC,KAAK,SACLC,QAAQ,YACRC,MAAM,UACNC,QAAS,WAAF,OAAQjB,EAAUP,EAAQ,GAC7BC,GAAW,GAAA,CAAAwB,SAAA,oBAIjBV,EAACW,EAAQ,CAAAC,MAAM,+BAA+BC,UAAU,OACtDH,SAAAV,EAACc,EAAUb,EAAAA,EAAA,CACTc,GAAI,CACFhB,SAAU,WACViB,MAAO,QACPC,OAAQ,QACRT,MAAO,SAACU,GAAK,OAAKC,EAAMD,EAAME,QAAQC,QAAQC,KAAM,GAAI,EACxDC,gBAAiB,SAACL,GAAK,OAAKA,EAAME,QAAQI,WAAWC,KAAK,EAC1D,UAAW,CACTF,gBAAiB,SAACL,GAAK,OAAKA,EAAME,QAAQI,WAAWC,KAAK,IAG9DC,KAAK,QACLjB,QAAS,SAACkB,GAAC,OAAKA,EAAEC,iBAAiB,GAC/BxC,GAAS,GAAA,CAEbsB,SAAAV,EAAC6B,EAAoB,CAAA,WAO3B7B,EAACW,EAAOV,EAAAA,EAAA,CAACW,MAAM,iBAAiBkB,OAAK,EAACjB,UAAW,OAAW1B,GAAY,GAAA,CAAAuB,SACtEV,EAACc,EAAUb,EAAAA,EAAA,CAACM,QAAQ,YAAYC,MAAM,UAAUkB,KAAK,QAAQjB,QAAS,WAAF,OAAQjB,EAAUP,EAAQ,GAAMC,GAAW,GAAA,CAC7GwB,SAAAV,EAACG,EAAuB,CAACC,SAAS,QAAQW,GAAI,CAAEX,SAAU,YAzC/CJ,EAAC+B,EAA8B,CAACzC,KAAMA,EAAMJ,YAAaA,GA8ChF,EASa6C,EAA0E,SAA5CC,GAA8F,IAA/C9C,EAAW8C,EAAX9C,YAAW+C,EAAAD,EAAE1C,KACrG,YADyG,IAAA2C,EAAGnD,EAAiBS,KAAI0C,KACpHnD,EAAiBW,OACrBO,EAACkC,EAAS,CAAA3B,QAAQ,cAAc4B,MAAO,OAAQC,OAAQ,GAAIrB,GAAEd,EAAA,CAAIoC,aAAc,GAAMnD,aAAAA,EAAAA,EAAa6B,MAEpGf,EAACkC,EAAQ,CAAC3B,QAAQ,WAAW4B,MAAO,GAAIC,OAAQ,GAAIrB,GAAEd,EAAOf,CAAAA,EAAAA,aAAW,EAAXA,EAAa6B,KACnF"}
1
+ {"version":3,"file":"btn.icon.add-to-package.js","sources":["../../src/action-license/btn.icon.add-to-package.tsx"],"sourcesContent":["import { Skeleton } from '@mui/material'\r\nimport { alpha, Button, IconButton, Stack, Tooltip } from '@mui/material'\r\nimport BookmarkAddOutlinedIcon from '@mui/icons-material/BookmarkAddOutlined'\r\nimport { HelpOutlinePulseIcon } from 'dinocollab-core/components'\r\nimport type { FC } from 'react'\r\nimport type { ButtonProps, IconButtonProps, TooltipProps } from '@mui/material'\r\n\r\nexport enum EBtnAddToPackage {\r\n Icon = 'icon',\r\n Button = 'button'\r\n}\r\nexport interface BtnIconAddToPackageProps<T> {\r\n product?: T\r\n buttonProps?: ButtonProps\r\n tooltipProps?: Partial<TooltipProps>\r\n helpProps?: Partial<IconButtonProps> & Record<string, any>\r\n kind?: EBtnAddToPackage\r\n addToCart: (item: T) => void\r\n}\r\n\r\nexport const ButtonIconAddToPackage = <T,>({\r\n product,\r\n buttonProps,\r\n tooltipProps,\r\n helpProps,\r\n kind = EBtnAddToPackage.Icon,\r\n addToCart\r\n}: BtnIconAddToPackageProps<T>) => {\r\n if (!product) return <ButtonIconAddToPackageSkeleton kind={kind} buttonProps={buttonProps} />\r\n switch (kind) {\r\n case EBtnAddToPackage.Button:\r\n return (\r\n <Stack direction='row' justifyContent='space-between' alignItems='center' position={'relative'}>\r\n <Button\r\n startIcon={<BookmarkAddOutlinedIcon fontSize='small' />}\r\n fullWidth\r\n type='submit'\r\n variant='contained'\r\n color='success'\r\n onClick={() => addToCart(product)}\r\n {...buttonProps}\r\n >\r\n Add to Playlist\r\n </Button>\r\n <Tooltip title='Read more about our services' placement='left'>\r\n <IconButton\r\n sx={{\r\n position: 'absolute',\r\n right: '-11px',\r\n bottom: '-11px',\r\n color: (theme) => alpha(theme.palette.primary.main, 0.8),\r\n backgroundColor: (theme) => theme.palette.background.paper,\r\n '&:hover': {\r\n backgroundColor: (theme) => theme.palette.background.paper\r\n }\r\n }}\r\n size='small'\r\n onClick={(e) => e.stopPropagation()}\r\n {...helpProps}\r\n >\r\n <HelpOutlinePulseIcon />\r\n </IconButton>\r\n </Tooltip>\r\n </Stack>\r\n )\r\n default:\r\n return (\r\n <Tooltip title='Add to Playlist' arrow placement={'top'} {...tooltipProps}>\r\n <IconButton variant='contained' color='inherit' size='small' onClick={() => addToCart(product)} {...buttonProps}>\r\n <BookmarkAddOutlinedIcon fontSize='small' sx={{ fontSize: 18 }} />\r\n </IconButton>\r\n </Tooltip>\r\n )\r\n }\r\n}\r\n\r\n// Skeleton for loading state\r\n\r\ninterface ButtonIconAddToPackageSkeletonProps {\r\n kind?: EBtnAddToPackage\r\n buttonProps?: ButtonProps\r\n}\r\n\r\nexport const ButtonIconAddToPackageSkeleton: FC<ButtonIconAddToPackageSkeletonProps> = ({ buttonProps, kind = EBtnAddToPackage.Icon }) => {\r\n if (kind === EBtnAddToPackage.Button) {\r\n return <Skeleton variant='rectangular' width={'100%'} height={36} sx={{ borderRadius: 2, ...buttonProps?.sx }} />\r\n }\r\n return <Skeleton variant='circular' width={32} height={32} sx={{ ...buttonProps?.sx }} />\r\n}\r\n"],"names":["EBtnAddToPackage","ButtonIconAddToPackage","_ref","product","buttonProps","tooltipProps","helpProps","_ref$kind","kind","Icon","addToCart","Button","_jsxs","Stack","direction","justifyContent","alignItems","position","_jsx","_objectSpread","startIcon","BookmarkAddOutlinedIcon","fontSize","fullWidth","type","variant","color","onClick","children","Tooltip","title","placement","IconButton","sx","right","bottom","theme","alpha","palette","primary","main","backgroundColor","background","paper","size","e","stopPropagation","HelpOutlinePulseIcon","arrow","ButtonIconAddToPackageSkeleton","_ref2","_ref2$kind","Skeleton","width","height","borderRadius"],"mappings":"gWAOYA,GAAZ,SAAYA,GACVA,EAAA,KAAA,OACAA,EAAA,OAAA,QACD,CAHD,CAAYA,IAAAA,EAGX,CAAA,QAUYC,EAAyB,SAAHC,GAOD,IANhCC,EAAOD,EAAPC,QACAC,EAAWF,EAAXE,YACAC,EAAYH,EAAZG,aACAC,EAASJ,EAATI,UAASC,EAAAL,EACTM,KAAAA,OAAI,IAAAD,EAAGP,EAAiBS,KAAIF,EAC5BG,EAASR,EAATQ,UAEA,OAAKP,EACGK,IACDR,EAAiBW,OAElBC,EAACC,EAAK,CAACC,UAAU,MAAMC,eAAe,gBAAgBC,WAAW,SAASC,SAAU,qBAClFC,EAACP,EAAMQ,EAAAA,EAAA,CACLC,UAAWF,EAACG,EAAwB,CAAAC,SAAS,UAC7CC,aACAC,KAAK,SACLC,QAAQ,YACRC,MAAM,UACNC,QAAS,WAAF,OAAQjB,EAAUP,EAAQ,GAC7BC,GAAW,GAAA,CAAAwB,SAAA,qBAIjBV,EAACW,EAAQ,CAAAC,MAAM,+BAA+BC,UAAU,OACtDH,SAAAV,EAACc,EAAUb,EAAAA,EAAA,CACTc,GAAI,CACFhB,SAAU,WACViB,MAAO,QACPC,OAAQ,QACRT,MAAO,SAACU,GAAK,OAAKC,EAAMD,EAAME,QAAQC,QAAQC,KAAM,GAAI,EACxDC,gBAAiB,SAACL,GAAK,OAAKA,EAAME,QAAQI,WAAWC,KAAK,EAC1D,UAAW,CACTF,gBAAiB,SAACL,GAAK,OAAKA,EAAME,QAAQI,WAAWC,KAAK,IAG9DC,KAAK,QACLjB,QAAS,SAACkB,GAAC,OAAKA,EAAEC,iBAAiB,GAC/BxC,GAAS,GAAA,CAEbsB,SAAAV,EAAC6B,EAAoB,CAAA,WAO3B7B,EAACW,EAAOV,EAAAA,EAAA,CAACW,MAAM,kBAAkBkB,OAAK,EAACjB,UAAW,OAAW1B,GAAY,GAAA,CAAAuB,SACvEV,EAACc,EAAUb,EAAAA,EAAA,CAACM,QAAQ,YAAYC,MAAM,UAAUkB,KAAK,QAAQjB,QAAS,WAAF,OAAQjB,EAAUP,EAAQ,GAAMC,GAAW,GAAA,CAC7GwB,SAAAV,EAACG,EAAuB,CAACC,SAAS,QAAQW,GAAI,CAAEX,SAAU,YAzC/CJ,EAAC+B,EAA8B,CAACzC,KAAMA,EAAMJ,YAAaA,GA8ChF,EASa6C,EAA0E,SAA5CC,GAA8F,IAA/C9C,EAAW8C,EAAX9C,YAAW+C,EAAAD,EAAE1C,KACrG,YADyG,IAAA2C,EAAGnD,EAAiBS,KAAI0C,KACpHnD,EAAiBW,OACrBO,EAACkC,EAAS,CAAA3B,QAAQ,cAAc4B,MAAO,OAAQC,OAAQ,GAAIrB,GAAEd,EAAA,CAAIoC,aAAc,GAAMnD,aAAAA,EAAAA,EAAa6B,MAEpGf,EAACkC,EAAQ,CAAC3B,QAAQ,WAAW4B,MAAO,GAAIC,OAAQ,GAAIrB,GAAEd,EAAOf,CAAAA,EAAAA,aAAW,EAAXA,EAAa6B,KACnF"}
@@ -1,2 +1,2 @@
1
- import{inherits as r,createClass as e,superPropGet as t,classCallCheck as i,callSuper as n,defineProperty as s}from"../_virtual/_rollupPluginBabelHelpers.js";import a from"events";var o=function(){function o(){var r;return i(this,o),r=n(this,o),s(r,"_createWrapListener",function(r){return function(){try{r.apply(void 0,arguments)}catch(r){console.error("Error in MediaRight listener:",r)}}}),r}return r(o,a),e(o,[{key:"subscribe",value:function(r,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?this._createWrapListener(e):e;return t(o,"addListener",this)([r,n]),function(){t(o,"removeListener",i)([r,n])}}}])}();export{o as MediaRightEventStore};
1
+ import{inherits as r,createClass as e,superPropGet as t,classCallCheck as s,callSuper as i,defineProperty as n}from"../_virtual/_rollupPluginBabelHelpers.js";import a from"events";var o=function(){function o(){var r;return s(this,o),r=i(this,o),n(r,"_createWrapListener",function(r){return function(){try{r.apply(void 0,arguments)}catch(r){console.error("Error in Playlist listener:",r)}}}),r}return r(o,a),e(o,[{key:"subscribe",value:function(r,e){var s=this,i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?this._createWrapListener(e):e;return t(o,"addListener",this)([r,i]),function(){t(o,"removeListener",s)([r,i])}}}])}();export{o as MediaRightEventStore};
2
2
  //# sourceMappingURL=event-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-store.js","sources":["../../src/media-right/event-store.ts"],"sourcesContent":["import EventEmitter from 'events'\r\nimport type { IMediaRightGroup } from './types'\r\n\r\nexport interface IEventOptions {\r\n message?: string\r\n}\r\n\r\nexport interface IMediaRightEventConfigs {\r\n stateChange: [{ groups: Record<string, IMediaRightGroup>; options?: IEventOptions }]\r\n requestState: [{ options?: IEventOptions }]\r\n}\r\n\r\nexport class MediaRightEventStore extends EventEmitter<IMediaRightEventConfigs> {\r\n constructor() {\r\n super()\r\n }\r\n\r\n /**\r\n * Subscribe to a specific channel\r\n * @param channel The channel to subscribe to\r\n * @param callback Function to call when an event occurs on this channel\r\n * @returns Unsubscribe function to remove the event listener\r\n */\r\n _createWrapListener = (callback: (...payload: any[]) => void) => {\r\n return (...payload: any[]) => {\r\n try {\r\n callback(...payload)\r\n } catch (error) {\r\n console.error('Error in MediaRight listener:', error)\r\n }\r\n }\r\n }\r\n\r\n subscribe<K extends keyof IMediaRightEventConfigs>(\r\n eventName: K,\r\n listener: K extends keyof IMediaRightEventConfigs\r\n ? IMediaRightEventConfigs[K] extends unknown[]\r\n ? (...args: IMediaRightEventConfigs[K]) => void\r\n : never\r\n : never,\r\n isTry: boolean = true\r\n ) {\r\n const action = isTry ? this._createWrapListener(listener) : listener\r\n super.addListener(eventName, action as any)\r\n return () => {\r\n super.removeListener(eventName, action as any)\r\n }\r\n }\r\n}\r\n"],"names":["MediaRightEventStore","_this","_classCallCheck","_callSuper","this","_defineProperty","callback","apply","arguments","error","console","_inherits","EventEmitter","_createClass","key","value","eventName","listener","_this2","action","_createWrapListener","_superPropGet"],"mappings":"oLAYaA,IAAAA,aACX,SAAAA,IAAA,IAAAC,EAkBC,OAlBDC,OAAAF,GACEC,EAAAE,EAAAC,KAAAJ,GAGFK,EAAAJ,EAMsB,sBAAA,SAACK,GACrB,OAAO,WACL,IACEA,EAAQC,WAAAC,EAAAA,UACT,CAAC,MAAOC,GACPC,QAAQD,MAAM,gCAAiCA,EAChD,CACF,IACFR,CAhBD,CAAC,OAAAU,EAAAX,EAHuCY,GAGvCC,EAAAb,EAAA,CAAA,CAAAc,IAAA,YAAAC,MAkBD,SACEC,EACAC,GAKqB,IAAAC,EAAAd,KAEfe,6DAAiBf,KAAKgB,oBAAoBH,GAAYA,EAE5D,OADAI,EAAArB,EAAkBgB,cAAAA,KAAlBK,CAAkBL,CAAAA,EAAWG,IACtB,WACLE,EAAArB,EAAA,iBAAAkB,EAAAG,CAAqBL,CAAAA,EAAWG,GACjC,CACH,IAAC"}
1
+ {"version":3,"file":"event-store.js","sources":["../../src/media-right/event-store.ts"],"sourcesContent":["import EventEmitter from 'events'\r\nimport type { IMediaRightGroup } from './types'\r\n\r\nexport interface IEventOptions {\r\n message?: string\r\n}\r\n\r\nexport interface IMediaRightEventConfigs {\r\n stateChange: [{ groups: Record<string, IMediaRightGroup>; options?: IEventOptions }]\r\n requestState: [{ options?: IEventOptions }]\r\n}\r\n\r\nexport class MediaRightEventStore extends EventEmitter<IMediaRightEventConfigs> {\r\n constructor() {\r\n super()\r\n }\r\n\r\n /**\r\n * Subscribe to a specific channel\r\n * @param channel The channel to subscribe to\r\n * @param callback Function to call when an event occurs on this channel\r\n * @returns Unsubscribe function to remove the event listener\r\n */\r\n _createWrapListener = (callback: (...payload: any[]) => void) => {\r\n return (...payload: any[]) => {\r\n try {\r\n callback(...payload)\r\n } catch (error) {\r\n console.error('Error in Playlist listener:', error)\r\n }\r\n }\r\n }\r\n\r\n subscribe<K extends keyof IMediaRightEventConfigs>(\r\n eventName: K,\r\n listener: K extends keyof IMediaRightEventConfigs\r\n ? IMediaRightEventConfigs[K] extends unknown[]\r\n ? (...args: IMediaRightEventConfigs[K]) => void\r\n : never\r\n : never,\r\n isTry: boolean = true\r\n ) {\r\n const action = isTry ? this._createWrapListener(listener) : listener\r\n super.addListener(eventName, action as any)\r\n return () => {\r\n super.removeListener(eventName, action as any)\r\n }\r\n }\r\n}\r\n"],"names":["MediaRightEventStore","_this","_classCallCheck","_callSuper","this","_defineProperty","callback","apply","arguments","error","console","_inherits","EventEmitter","_createClass","key","value","eventName","listener","_this2","action","_createWrapListener","_superPropGet"],"mappings":"oLAYaA,IAAAA,aACX,SAAAA,IAAA,IAAAC,EAkBC,OAlBDC,OAAAF,GACEC,EAAAE,EAAAC,KAAAJ,GAGFK,EAAAJ,EAMsB,sBAAA,SAACK,GACrB,OAAO,WACL,IACEA,EAAQC,WAAAC,EAAAA,UACT,CAAC,MAAOC,GACPC,QAAQD,MAAM,8BAA+BA,EAC9C,CACF,IACFR,CAhBD,CAAC,OAAAU,EAAAX,EAHuCY,GAGvCC,EAAAb,EAAA,CAAA,CAAAc,IAAA,YAAAC,MAkBD,SACEC,EACAC,GAKqB,IAAAC,EAAAd,KAEfe,6DAAiBf,KAAKgB,oBAAoBH,GAAYA,EAE5D,OADAI,EAAArB,EAAkBgB,cAAAA,KAAlBK,CAAkBL,CAAAA,EAAWG,IACtB,WACLE,EAAArB,EAAA,iBAAAkB,EAAAG,CAAqBL,CAAAA,EAAWG,GACjC,CACH,IAAC"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as r,toConsumableArray as t,objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as o,jsx as n}from"react/jsx-runtime";import{createRoot as i}from"react-dom/client";import{useMemo as u,useState as c,useEffect as l}from"react";import{Dialog as d,Box as a,DialogContent as m,Typography as s,DialogActions as f,Button as p}from"@mui/material";import{CollectionsList as h}from"./units.js";import{GuideSteps as v}from"../guide-steps/index.js";import{ModalHeader as g}from"./modal-header.js";import{canAddGroup as C,generateGroupId as b}from"../helpers.js";import{NewCollectionButton as I,NewCollectionInput as x}from"../unit.control.js";var P=function(i){var b=i.open,P=i.onClose,y=i.onConfirm,S=i.groups,j=i.guideStepsProps,k=i.cartItem,G=u(function(){return null!=k&&k.ProductId?S.filter(function(r){var t;return null===(t=r.items)||void 0===t?void 0:t.some(function(r){return r.ProductId===k.ProductId})}).map(function(r){return r.id}).sort():[]},[S,k]),W=G.length>0?G:S.length>0?[S[0].id]:[],A=c(W),E=r(A,2),B=E[0],M=E[1],_=c(!1),D=r(_,2),H=D[0],K=D[1],L=c(""),O=r(L,2),R=O[0],T=O[1];l(function(){if(b){var r=G.length>0?G:S.length>0?[S[0].id]:[];M(r),K(!1),T("")}},[b,G,S.length]);var Y=u(function(){if(H&&R.trim())return!0;var r=t(B).sort();return G.length!==r.length||G.some(function(t,e){return t!==r[e]})},[H,R,B,G]),q=function(){M([]),K(!1),T(""),P()};return o(d,{open:b,onClose:q,maxWidth:"xs",fullWidth:!0,disableScrollLock:!0,keepMounted:!1,scroll:"paper",children:[n(g,{cartItem:k,onClose:q}),o(a,{component:"form",onSubmit:function(r){if(r.preventDefault(),Y)if(H&&R.trim())y([],[],R.trim());else{var t=B.filter(function(r){return!G.includes(r)}),e=G.filter(function(r){return!B.includes(r)});y(t,e)}else q()},children:[o(m,{children:[n(s,{variant:"subtitle1",sx:{mb:1,fontWeight:600},children:"Your Media Rights Package"}),C(S)&&(H?n(x,{value:R,onChange:T}):n(I,{onClick:function(){K(!0)}})),n(h,{groups:S,selectedGroupIds:B,onGroupSelect:function(r){M(function(e){return e.includes(r)?e.filter(function(t){return t!==r}):[].concat(t(e),[r])}),K(!1)}})]}),o(f,{sx:{px:3,pb:3},children:[j&&n(v,e({iconButtonProps:{color:"primary",sx:{mr:"auto"}}},j)),n(p,{onClick:q,variant:"text",type:"button",color:"inherit",children:"Cancel"}),n(p,{type:"submit",variant:Y?"contained":"outlined",disabled:!!H&&!R.trim(),color:"primary",sx:{minWidth:100},children:H?"Create & Add":G.length>0?Y?"Save Changes":"OK":"Save"})]})]})]})},y=function(r){var t=r.cartItem,o=r.groups,u=r.guideStepsProps,c=r.addGroup,l=r.addItem,d=r.removeItem,a=document.createElement("div");document.body.appendChild(a);var m=i(a);m.render(n(P,{open:!0,onClose:function(){m.unmount(),document.body.removeChild(a)},onConfirm:function(r,o,n){if(t){if(n){var i=b();c({id:i,name:n});var u=e(e({},t),{},{GroupId:i});l(u)}else o.forEach(function(r){t.ProductId&&d(r,t.ProductId)}),r.forEach(function(r){var o=e(e({},t),{},{GroupId:r});l(o)});m.unmount(),document.body.removeChild(a)}},guideStepsProps:u,groups:o,cartItem:t}))};export{P as GroupSelectorModal,y as showGroupSelectorModal};
1
+ import{slicedToArray as r,toConsumableArray as t,objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as o,jsx as n}from"react/jsx-runtime";import{createRoot as i}from"react-dom/client";import{useMemo as u,useState as l,useEffect as c}from"react";import{Dialog as d,Box as a,DialogContent as m,Typography as s,DialogActions as f,Button as p}from"@mui/material";import{CollectionsList as h}from"./units.js";import{GuideSteps as v}from"../guide-steps/index.js";import{ModalHeader as g}from"./modal-header.js";import{canAddGroup as C,generateGroupId as b}from"../helpers.js";import{NewCollectionButton as I,NewCollectionInput as x}from"../unit.control.js";var P=function(i){var b=i.open,P=i.onClose,y=i.onConfirm,S=i.groups,j=i.guideStepsProps,G=i.cartItem,k=u(function(){return null!=G&&G.ProductId?S.filter(function(r){var t;return null===(t=r.items)||void 0===t?void 0:t.some(function(r){return r.ProductId===G.ProductId})}).map(function(r){return r.id}).sort():[]},[S,G]),W=k.length>0?k:S.length>0?[S[0].id]:[],A=l(W),E=r(A,2),B=E[0],_=E[1],D=l(!1),H=r(D,2),K=H[0],L=H[1],M=l(""),O=r(M,2),T=O[0],Y=O[1];c(function(){if(b){var r=k.length>0?k:S.length>0?[S[0].id]:[];_(r),L(!1),Y("")}},[b,k,S.length]);var q=u(function(){if(K&&T.trim())return!0;var r=t(B).sort();return k.length!==r.length||k.some(function(t,e){return t!==r[e]})},[K,T,B,k]),w=function(){_([]),L(!1),Y(""),P()};return o(d,{open:b,onClose:w,maxWidth:"xs",fullWidth:!0,disableScrollLock:!0,keepMounted:!1,scroll:"paper",children:[n(g,{cartItem:G,onClose:w}),o(a,{component:"form",onSubmit:function(r){if(r.preventDefault(),q)if(K&&T.trim())y([],[],T.trim());else{var t=B.filter(function(r){return!k.includes(r)}),e=k.filter(function(r){return!B.includes(r)});y(t,e)}else w()},children:[o(m,{children:[n(s,{variant:"subtitle1",sx:{mb:1,fontWeight:600},children:"Your Playlist"}),C(S)&&(K?n(x,{value:T,onChange:Y}):n(I,{onClick:function(){L(!0)}})),n(h,{groups:S,selectedGroupIds:B,onGroupSelect:function(r){_(function(e){return e.includes(r)?e.filter(function(t){return t!==r}):[].concat(t(e),[r])}),L(!1)}})]}),o(f,{sx:{px:3,pb:3},children:[j&&n(v,e({iconButtonProps:{color:"primary",sx:{mr:"auto"}}},j)),n(p,{onClick:w,variant:"text",type:"button",color:"inherit",children:"Cancel"}),n(p,{type:"submit",variant:q?"contained":"outlined",disabled:!!K&&!T.trim(),color:"primary",sx:{minWidth:100},children:K?"Create & Add":k.length>0?q?"Save Changes":"OK":"Save"})]})]})]})},y=function(r){var t=r.cartItem,o=r.groups,u=r.guideStepsProps,l=r.addGroup,c=r.addItem,d=r.removeItem,a=document.createElement("div");document.body.appendChild(a);var m=i(a);m.render(n(P,{open:!0,onClose:function(){m.unmount(),document.body.removeChild(a)},onConfirm:function(r,o,n){if(t){if(n){var i=b();l({id:i,name:n});var u=e(e({},t),{},{GroupId:i});c(u)}else o.forEach(function(r){t.ProductId&&d(r,t.ProductId)}),r.forEach(function(r){var o=e(e({},t),{},{GroupId:r});c(o)});m.unmount(),document.body.removeChild(a)}},guideStepsProps:u,groups:o,cartItem:t}))};export{P as GroupSelectorModal,y as showGroupSelectorModal};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/media-right/group-selector/index.tsx"],"sourcesContent":["import { createRoot } from 'react-dom/client'\r\nimport { useState, useEffect, useMemo } from 'react'\r\nimport { Dialog, DialogContent, DialogActions, Button, Typography, Box } from '@mui/material'\r\nimport type { FC, FormEvent } from 'react'\r\nimport { CollectionsList } from './units'\r\nimport { GuideSteps } from '../guide-steps'\r\nimport { ModalHeader } from './modal-header'\r\nimport { canAddGroup, generateGroupId } from '../helpers'\r\nimport { NewCollectionButton, NewCollectionInput } from '../unit.control'\r\nimport type { IGuideStepsProps } from '../guide-steps'\r\nimport type { IMediaRightGroup, IMediaRightItem } from '../types'\r\n\r\nexport interface IGroupSelectorModalProps {\r\n open: boolean\r\n guideStepsProps?: IGuideStepsProps\r\n onClose: () => void\r\n onConfirm: (groupIdsToAdd: string[], groupIdsToRemove: string[], newGroupName?: string) => void\r\n groups: IMediaRightGroup[]\r\n cartItem: IMediaRightItem | null\r\n}\r\n\r\nexport const GroupSelectorModal: FC<IGroupSelectorModalProps> = ({ open, onClose, onConfirm, groups, guideStepsProps, cartItem }) => {\r\n // Find all groups that contain this item\r\n const currentGroupIds = useMemo(() => {\r\n if (!cartItem?.ProductId) return []\r\n const l = groups.filter((g) => g.items?.some((item) => item.ProductId === cartItem.ProductId))\r\n return l.map((g) => g.id).sort()\r\n }, [groups, cartItem])\r\n\r\n // Auto-select: all current groups if exists, otherwise first group if available\r\n const initialGroupIds = currentGroupIds.length > 0 ? currentGroupIds : groups.length > 0 ? [groups[0].id] : []\r\n\r\n const [selectedGroupIds, setSelectedGroupIds] = useState<string[]>(initialGroupIds)\r\n const [showNewGroupInput, setShowNewGroupInput] = useState(false)\r\n const [newName, setNewName] = useState<string>('')\r\n\r\n // Update selection when modal opens or groups/cartItem changes\r\n useEffect(() => {\r\n if (open) {\r\n const newInitialGroupIds = currentGroupIds.length > 0 ? currentGroupIds : groups.length > 0 ? [groups[0].id] : []\r\n setSelectedGroupIds(newInitialGroupIds)\r\n setShowNewGroupInput(false)\r\n setNewName('')\r\n }\r\n }, [open, currentGroupIds, groups.length])\r\n\r\n // Check if there's any change\r\n // const hasChanges = () => {\r\n // if (showNewGroupInput && newName.trim()) return true\r\n\r\n // // Sort and compare arrays (currentGroupIds is already sorted)\r\n // const sortedSelected = [...selectedGroupIds].sort()\r\n\r\n // // Check if arrays are different\r\n // if (currentGroupIds.length !== sortedSelected.length) return true\r\n\r\n // return currentGroupIds.some((id, index) => id !== sortedSelected[index])\r\n // }\r\n\r\n const isChanged = useMemo(() => {\r\n if (showNewGroupInput && newName.trim()) return true\r\n\r\n // Sort and compare arrays (currentGroupIds is already sorted)\r\n const sortedSelected = [...selectedGroupIds].sort()\r\n\r\n // Check if arrays are different\r\n if (currentGroupIds.length !== sortedSelected.length) return true\r\n return currentGroupIds.some((id, index) => id !== sortedSelected[index])\r\n }, [showNewGroupInput, newName, selectedGroupIds, currentGroupIds])\r\n\r\n const handleSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n\r\n // Only proceed if there are changes\r\n if (!isChanged) {\r\n handleClose()\r\n return\r\n }\r\n\r\n if (showNewGroupInput && newName.trim()) {\r\n // Create new group and add item to it\r\n onConfirm([], [], newName.trim())\r\n } else {\r\n // Calculate changes\r\n const groupIdsToAdd = selectedGroupIds.filter((id) => !currentGroupIds.includes(id))\r\n const groupIdsToRemove = currentGroupIds.filter((id) => !selectedGroupIds.includes(id))\r\n onConfirm(groupIdsToAdd, groupIdsToRemove)\r\n }\r\n }\r\n\r\n const handleClose = () => {\r\n setSelectedGroupIds([])\r\n setShowNewGroupInput(false)\r\n setNewName('')\r\n onClose()\r\n }\r\n\r\n const handleNewGroupClick = () => {\r\n setShowNewGroupInput(true)\r\n }\r\n\r\n const handleGroupSelect = (groupId: string) => {\r\n setSelectedGroupIds((prev) => {\r\n if (prev.includes(groupId)) {\r\n // Uncheck: remove from selection\r\n return prev.filter((id) => id !== groupId)\r\n } else {\r\n // Check: add to selection\r\n return [...prev, groupId]\r\n }\r\n })\r\n setShowNewGroupInput(false)\r\n }\r\n\r\n const isConfirmDisabled = () => {\r\n if (showNewGroupInput) return !newName.trim()\r\n // Allow unchecking all groups (to remove item from all groups)\r\n return false\r\n }\r\n\r\n const getButtonText = () => {\r\n if (showNewGroupInput) return 'Create & Add'\r\n\r\n // Case 1: Item already exists in some groups\r\n if (currentGroupIds.length > 0) {\r\n return isChanged ? 'Save Changes' : 'OK'\r\n }\r\n\r\n // Case 2: Item doesn't exist in any group yet\r\n return 'Save'\r\n }\r\n\r\n return (\r\n <Dialog open={open} onClose={handleClose} maxWidth='xs' fullWidth disableScrollLock={true} keepMounted={false} scroll='paper'>\r\n <ModalHeader cartItem={cartItem} onClose={handleClose} />\r\n <Box component='form' onSubmit={handleSubmit}>\r\n <DialogContent>\r\n <Typography variant='subtitle1' sx={{ mb: 1, fontWeight: 600 }}>\r\n Your Media Rights Package\r\n </Typography>\r\n {canAddGroup(groups) &&\r\n (!showNewGroupInput ? (\r\n <NewCollectionButton onClick={handleNewGroupClick} />\r\n ) : (\r\n <NewCollectionInput value={newName} onChange={setNewName} />\r\n ))}\r\n <CollectionsList groups={groups} selectedGroupIds={selectedGroupIds} onGroupSelect={handleGroupSelect} />\r\n </DialogContent>\r\n\r\n <DialogActions sx={{ px: 3, pb: 3 }}>\r\n {guideStepsProps && <GuideSteps iconButtonProps={{ color: 'primary', sx: { mr: 'auto' } }} {...guideStepsProps} />}\r\n <Button onClick={handleClose} variant='text' type='button' color='inherit'>\r\n Cancel\r\n </Button>\r\n <Button type='submit' variant={isChanged ? 'contained' : 'outlined'} disabled={isConfirmDisabled()} color='primary' sx={{ minWidth: 100 }}>\r\n {getButtonText()}\r\n </Button>\r\n </DialogActions>\r\n </Box>\r\n </Dialog>\r\n )\r\n}\r\n\r\nexport interface IShowGroupSelectorModalProps {\r\n cartItem: IMediaRightItem | null\r\n groups: IMediaRightGroup[]\r\n guideStepsProps?: IGuideStepsProps\r\n addGroup: (group: Omit<IMediaRightGroup, 'createdAt' | 'items' | 'channels'>) => void\r\n addItem: (item: IMediaRightItem) => void\r\n removeItem: (groupId: string, productId: string) => void\r\n}\r\n\r\nexport const showGroupSelectorModal = ({ cartItem, groups, guideStepsProps, addGroup, addItem, removeItem }: IShowGroupSelectorModalProps) => {\r\n const modalContainer = document.createElement('div')\r\n document.body.appendChild(modalContainer)\r\n const root = createRoot(modalContainer)\r\n\r\n const handleModalConfirmInModal = (groupIdsToAdd: string[], groupIdsToRemove: string[], newGroupName?: string) => {\r\n if (!cartItem) return\r\n\r\n // Create new group if needed\r\n if (newGroupName) {\r\n const newGroupId = generateGroupId()\r\n addGroup({ id: newGroupId, name: newGroupName })\r\n // Add item to the new group\r\n const cartItemWithGroup: IMediaRightItem = { ...cartItem, GroupId: newGroupId }\r\n addItem(cartItemWithGroup)\r\n } else {\r\n // Remove from groups\r\n groupIdsToRemove.forEach((groupId) => {\r\n if (cartItem.ProductId) {\r\n removeItem(groupId, cartItem.ProductId)\r\n }\r\n })\r\n\r\n // Add to groups\r\n groupIdsToAdd.forEach((groupId) => {\r\n const cartItemWithGroup: IMediaRightItem = { ...cartItem, GroupId: groupId }\r\n addItem(cartItemWithGroup)\r\n })\r\n }\r\n\r\n root.unmount()\r\n document.body.removeChild(modalContainer)\r\n }\r\n root.render(\r\n <GroupSelectorModal\r\n open={true}\r\n onClose={() => {\r\n root.unmount()\r\n document.body.removeChild(modalContainer)\r\n }}\r\n onConfirm={handleModalConfirmInModal}\r\n guideStepsProps={guideStepsProps}\r\n groups={groups}\r\n cartItem={cartItem}\r\n />\r\n )\r\n}\r\n"],"names":["GroupSelectorModal","_ref","open","onClose","onConfirm","groups","guideStepsProps","cartItem","currentGroupIds","useMemo","ProductId","filter","g","_g$items","items","some","item","map","id","sort","initialGroupIds","length","_useState","useState","_useState2","_slicedToArray","selectedGroupIds","setSelectedGroupIds","_useState3","_useState4","showNewGroupInput","setShowNewGroupInput","_useState5","_useState6","newName","setNewName","useEffect","newInitialGroupIds","isChanged","trim","sortedSelected","_toConsumableArray","index","handleClose","_jsxs","Dialog","maxWidth","fullWidth","disableScrollLock","keepMounted","scroll","children","_jsx","ModalHeader","Box","component","onSubmit","e","preventDefault","groupIdsToAdd","includes","groupIdsToRemove","DialogContent","Typography","variant","sx","mb","fontWeight","canAddGroup","NewCollectionInput","value","onChange","NewCollectionButton","onClick","CollectionsList","onGroupSelect","groupId","prev","concat","DialogActions","px","pb","GuideSteps","_objectSpread","iconButtonProps","color","mr","Button","type","disabled","minWidth","showGroupSelectorModal","_ref2","addGroup","addItem","removeItem","modalContainer","document","createElement","body","appendChild","root","createRoot","render","unmount","removeChild","newGroupName","newGroupId","generateGroupId","name","cartItemWithGroup","GroupId","forEach"],"mappings":"6qBAqBaA,EAAmD,SAAjCC,GAAqG,IAAjEC,EAAID,EAAJC,KAAMC,EAAOF,EAAPE,QAASC,EAASH,EAATG,UAAWC,EAAMJ,EAANI,OAAQC,EAAeL,EAAfK,gBAAiBC,EAAQN,EAARM,SAE9GC,EAAkBC,EAAQ,WAC9B,OAAKF,SAAAA,EAAUG,UACLL,EAAOM,OAAO,SAACC,GAAC,IAAAC,EAAA,OAAY,QAAZA,EAAKD,EAAEE,aAAK,IAAAD,OAAA,EAAPA,EAASE,KAAK,SAACC,GAAI,OAAKA,EAAKN,YAAcH,EAASG,cAC1EO,IAAI,SAACL,GAAC,OAAKA,EAAEM,EAAG,GAACC,OAFO,EAGnC,EAAG,CAACd,EAAQE,IAGNa,EAAkBZ,EAAgBa,OAAS,EAAIb,EAAkBH,EAAOgB,OAAS,EAAI,CAAChB,EAAO,GAAGa,IAAM,GAE5GI,EAAgDC,EAAmBH,GAAgBI,EAAAC,EAAAH,EAAA,GAA5EI,EAAgBF,EAAA,GAAEG,EAAmBH,EAAA,GAC5CI,EAAkDL,GAAS,GAAMM,EAAAJ,EAAAG,EAAA,GAA1DE,EAAiBD,EAAA,GAAEE,EAAoBF,EAAA,GAC9CG,EAA8BT,EAAiB,IAAGU,EAAAR,EAAAO,EAAA,GAA3CE,EAAOD,EAAA,GAAEE,EAAUF,EAAA,GAG1BG,EAAU,WACR,GAAIlC,EAAM,CACR,IAAMmC,EAAqB7B,EAAgBa,OAAS,EAAIb,EAAkBH,EAAOgB,OAAS,EAAI,CAAChB,EAAO,GAAGa,IAAM,GAC/GS,EAAoBU,GACpBN,GAAqB,GACrBI,EAAW,GACZ,CACF,EAAE,CAACjC,EAAMM,EAAiBH,EAAOgB,SAelC,IAAMiB,EAAY7B,EAAQ,WACxB,GAAIqB,GAAqBI,EAAQK,OAAQ,OAAO,EAGhD,IAAMC,EAAiBC,EAAIf,GAAkBP,OAG7C,OAAIX,EAAgBa,SAAWmB,EAAenB,QACvCb,EAAgBO,KAAK,SAACG,EAAIwB,GAAK,OAAKxB,IAAOsB,EAAeE,IAClE,EAAE,CAACZ,EAAmBI,EAASR,EAAkBlB,IAsB5CmC,EAAc,WAClBhB,EAAoB,IACpBI,GAAqB,GACrBI,EAAW,IACXhC,GACD,EAqCD,OACEyC,EAACC,EAAO,CAAA3C,KAAMA,EAAMC,QAASwC,EAAaG,SAAS,KAAKC,WAAS,EAACC,mBAAmB,EAAMC,aAAa,EAAOC,OAAO,QAAOC,SAAA,CAC3HC,EAACC,EAAW,CAAC9C,SAAUA,EAAUJ,QAASwC,IAC1CC,EAACU,EAAI,CAAAC,UAAU,OAAOC,SAjEL,SAACC,GAIpB,GAHAA,EAAEC,iBAGGpB,EAKL,GAAIR,GAAqBI,EAAQK,OAE/BnC,EAAU,GAAI,GAAI8B,EAAQK,YACrB,CAEL,IAAMoB,EAAgBjC,EAAiBf,OAAO,SAACO,GAAE,OAAMV,EAAgBoD,SAAS1C,KAC1E2C,EAAmBrD,EAAgBG,OAAO,SAACO,GAAE,OAAMQ,EAAiBkC,SAAS1C,KACnFd,EAAUuD,EAAeE,EAC1B,MAZClB,GAaH,EAgDKQ,SAAA,CAAAP,EAACkB,EACC,CAAAX,SAAA,CAAAC,EAACW,EAAW,CAAAC,QAAQ,YAAYC,GAAI,CAAEC,GAAI,EAAGC,WAAY,KAAKhB,SAAA,8BAG7DiB,EAAY/D,KACTyB,EAGAsB,EAACiB,EAAkB,CAACC,MAAOpC,EAASqC,SAAUpC,IAF9CiB,EAACoB,EAAmB,CAACC,QA7CL,WAC1B1C,GAAqB,EACtB,KA+COqB,EAACsB,EAAgB,CAAArE,OAAQA,EAAQqB,iBAAkBA,EAAkBiD,cA7CnD,SAACC,GACzBjD,EAAoB,SAACkD,GACnB,OAAIA,EAAKjB,SAASgB,GAETC,EAAKlE,OAAO,SAACO,GAAE,OAAKA,IAAO0D,IAGlC,GAAAE,OAAArC,EAAWoC,IAAMD,GAErB,GACA7C,GAAqB,EACtB,OAqCKa,EAACmC,EAAa,CAACd,GAAI,CAAEe,GAAI,EAAGC,GAAI,GAC7B9B,SAAA,CAAA7C,GAAmB8C,EAAC8B,EAAUC,EAAA,CAACC,gBAAiB,CAAEC,MAAO,UAAWpB,GAAI,CAAEqB,GAAI,UAAgBhF,IAC/F8C,EAACmC,EAAM,CAACd,QAAS9B,EAAaqB,QAAQ,OAAOwB,KAAK,SAASH,MAAM,8BAGjEjC,EAACmC,EAAM,CAACC,KAAK,SAASxB,QAAS1B,EAAY,YAAc,WAAYmD,WAvCvE3D,IAA2BI,EAAQK,OAuCmE8C,MAAM,UAAUpB,GAAI,CAAEyB,SAAU,KACjIvC,SAlCLrB,EAA0B,eAG1BtB,EAAgBa,OAAS,EACpBiB,EAAY,eAAiB,KAI/B,iBAgCX,EAWaqD,EAAyB,SAAHC,GAA0G,IAApGrF,EAAQqF,EAARrF,SAAUF,EAAMuF,EAANvF,OAAQC,EAAesF,EAAftF,gBAAiBuF,EAAQD,EAARC,SAAUC,EAAOF,EAAPE,QAASC,EAAUH,EAAVG,WACvFC,EAAiBC,SAASC,cAAc,OAC9CD,SAASE,KAAKC,YAAYJ,GAC1B,IAAMK,EAAOC,EAAWN,GA8BxBK,EAAKE,OACHnD,EAACpD,EAAkB,CACjBE,MAAM,EACNC,QAAS,WACPkG,EAAKG,UACLP,SAASE,KAAKM,YAAYT,EAC3B,EACD5F,UAnC8B,SAACuD,EAAyBE,EAA4B6C,GACtF,GAAKnG,EAAL,CAGA,GAAImG,EAAc,CAChB,IAAMC,EAAaC,IACnBf,EAAS,CAAE3E,GAAIyF,EAAYE,KAAMH,IAEjC,IAAMI,EAAiB3B,EAAAA,KAAyB5E,GAAQ,GAAA,CAAEwG,QAASJ,IACnEb,EAAQgB,EACT,MAECjD,EAAiBmD,QAAQ,SAACpC,GACpBrE,EAASG,WACXqF,EAAWnB,EAASrE,EAASG,UAEjC,GAGAiD,EAAcqD,QAAQ,SAACpC,GACrB,IAAMkC,EAAiB3B,EAAAA,KAAyB5E,GAAQ,GAAA,CAAEwG,QAASnC,IACnEkB,EAAQgB,EACV,GAGFT,EAAKG,UACLP,SAASE,KAAKM,YAAYT,EAzBX,CA0BhB,EASG1F,gBAAiBA,EACjBD,OAAQA,EACRE,SAAUA,IAGhB"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/media-right/group-selector/index.tsx"],"sourcesContent":["import { createRoot } from 'react-dom/client'\r\nimport { useState, useEffect, useMemo } from 'react'\r\nimport { Dialog, DialogContent, DialogActions, Button, Typography, Box } from '@mui/material'\r\nimport type { FC, FormEvent } from 'react'\r\nimport { CollectionsList } from './units'\r\nimport { GuideSteps } from '../guide-steps'\r\nimport { ModalHeader } from './modal-header'\r\nimport { canAddGroup, generateGroupId } from '../helpers'\r\nimport { NewCollectionButton, NewCollectionInput } from '../unit.control'\r\nimport type { IGuideStepsProps } from '../guide-steps'\r\nimport type { IMediaRightGroup, IMediaRightItem } from '../types'\r\n\r\nexport interface IGroupSelectorModalProps {\r\n open: boolean\r\n guideStepsProps?: IGuideStepsProps\r\n onClose: () => void\r\n onConfirm: (groupIdsToAdd: string[], groupIdsToRemove: string[], newGroupName?: string) => void\r\n groups: IMediaRightGroup[]\r\n cartItem: IMediaRightItem | null\r\n}\r\n\r\nexport const GroupSelectorModal: FC<IGroupSelectorModalProps> = ({ open, onClose, onConfirm, groups, guideStepsProps, cartItem }) => {\r\n // Find all groups that contain this item\r\n const currentGroupIds = useMemo(() => {\r\n if (!cartItem?.ProductId) return []\r\n const l = groups.filter((g) => g.items?.some((item) => item.ProductId === cartItem.ProductId))\r\n return l.map((g) => g.id).sort()\r\n }, [groups, cartItem])\r\n\r\n // Auto-select: all current groups if exists, otherwise first group if available\r\n const initialGroupIds = currentGroupIds.length > 0 ? currentGroupIds : groups.length > 0 ? [groups[0].id] : []\r\n\r\n const [selectedGroupIds, setSelectedGroupIds] = useState<string[]>(initialGroupIds)\r\n const [showNewGroupInput, setShowNewGroupInput] = useState(false)\r\n const [newName, setNewName] = useState<string>('')\r\n\r\n // Update selection when modal opens or groups/cartItem changes\r\n useEffect(() => {\r\n if (open) {\r\n const newInitialGroupIds = currentGroupIds.length > 0 ? currentGroupIds : groups.length > 0 ? [groups[0].id] : []\r\n setSelectedGroupIds(newInitialGroupIds)\r\n setShowNewGroupInput(false)\r\n setNewName('')\r\n }\r\n }, [open, currentGroupIds, groups.length])\r\n\r\n // Check if there's any change\r\n // const hasChanges = () => {\r\n // if (showNewGroupInput && newName.trim()) return true\r\n\r\n // // Sort and compare arrays (currentGroupIds is already sorted)\r\n // const sortedSelected = [...selectedGroupIds].sort()\r\n\r\n // // Check if arrays are different\r\n // if (currentGroupIds.length !== sortedSelected.length) return true\r\n\r\n // return currentGroupIds.some((id, index) => id !== sortedSelected[index])\r\n // }\r\n\r\n const isChanged = useMemo(() => {\r\n if (showNewGroupInput && newName.trim()) return true\r\n\r\n // Sort and compare arrays (currentGroupIds is already sorted)\r\n const sortedSelected = [...selectedGroupIds].sort()\r\n\r\n // Check if arrays are different\r\n if (currentGroupIds.length !== sortedSelected.length) return true\r\n return currentGroupIds.some((id, index) => id !== sortedSelected[index])\r\n }, [showNewGroupInput, newName, selectedGroupIds, currentGroupIds])\r\n\r\n const handleSubmit = (e: FormEvent) => {\r\n e.preventDefault()\r\n\r\n // Only proceed if there are changes\r\n if (!isChanged) {\r\n handleClose()\r\n return\r\n }\r\n\r\n if (showNewGroupInput && newName.trim()) {\r\n // Create new group and add item to it\r\n onConfirm([], [], newName.trim())\r\n } else {\r\n // Calculate changes\r\n const groupIdsToAdd = selectedGroupIds.filter((id) => !currentGroupIds.includes(id))\r\n const groupIdsToRemove = currentGroupIds.filter((id) => !selectedGroupIds.includes(id))\r\n onConfirm(groupIdsToAdd, groupIdsToRemove)\r\n }\r\n }\r\n\r\n const handleClose = () => {\r\n setSelectedGroupIds([])\r\n setShowNewGroupInput(false)\r\n setNewName('')\r\n onClose()\r\n }\r\n\r\n const handleNewGroupClick = () => {\r\n setShowNewGroupInput(true)\r\n }\r\n\r\n const handleGroupSelect = (groupId: string) => {\r\n setSelectedGroupIds((prev) => {\r\n if (prev.includes(groupId)) {\r\n // Uncheck: remove from selection\r\n return prev.filter((id) => id !== groupId)\r\n } else {\r\n // Check: add to selection\r\n return [...prev, groupId]\r\n }\r\n })\r\n setShowNewGroupInput(false)\r\n }\r\n\r\n const isConfirmDisabled = () => {\r\n if (showNewGroupInput) return !newName.trim()\r\n // Allow unchecking all groups (to remove item from all groups)\r\n return false\r\n }\r\n\r\n const getButtonText = () => {\r\n if (showNewGroupInput) return 'Create & Add'\r\n\r\n // Case 1: Item already exists in some groups\r\n if (currentGroupIds.length > 0) {\r\n return isChanged ? 'Save Changes' : 'OK'\r\n }\r\n\r\n // Case 2: Item doesn't exist in any group yet\r\n return 'Save'\r\n }\r\n\r\n return (\r\n <Dialog open={open} onClose={handleClose} maxWidth='xs' fullWidth disableScrollLock={true} keepMounted={false} scroll='paper'>\r\n <ModalHeader cartItem={cartItem} onClose={handleClose} />\r\n <Box component='form' onSubmit={handleSubmit}>\r\n <DialogContent>\r\n <Typography variant='subtitle1' sx={{ mb: 1, fontWeight: 600 }}>\r\n Your Playlist\r\n </Typography>\r\n {canAddGroup(groups) &&\r\n (!showNewGroupInput ? (\r\n <NewCollectionButton onClick={handleNewGroupClick} />\r\n ) : (\r\n <NewCollectionInput value={newName} onChange={setNewName} />\r\n ))}\r\n <CollectionsList groups={groups} selectedGroupIds={selectedGroupIds} onGroupSelect={handleGroupSelect} />\r\n </DialogContent>\r\n\r\n <DialogActions sx={{ px: 3, pb: 3 }}>\r\n {guideStepsProps && <GuideSteps iconButtonProps={{ color: 'primary', sx: { mr: 'auto' } }} {...guideStepsProps} />}\r\n <Button onClick={handleClose} variant='text' type='button' color='inherit'>\r\n Cancel\r\n </Button>\r\n <Button type='submit' variant={isChanged ? 'contained' : 'outlined'} disabled={isConfirmDisabled()} color='primary' sx={{ minWidth: 100 }}>\r\n {getButtonText()}\r\n </Button>\r\n </DialogActions>\r\n </Box>\r\n </Dialog>\r\n )\r\n}\r\n\r\nexport interface IShowGroupSelectorModalProps {\r\n cartItem: IMediaRightItem | null\r\n groups: IMediaRightGroup[]\r\n guideStepsProps?: IGuideStepsProps\r\n addGroup: (group: Omit<IMediaRightGroup, 'createdAt' | 'items' | 'channels'>) => void\r\n addItem: (item: IMediaRightItem) => void\r\n removeItem: (groupId: string, productId: string) => void\r\n}\r\n\r\nexport const showGroupSelectorModal = ({ cartItem, groups, guideStepsProps, addGroup, addItem, removeItem }: IShowGroupSelectorModalProps) => {\r\n const modalContainer = document.createElement('div')\r\n document.body.appendChild(modalContainer)\r\n const root = createRoot(modalContainer)\r\n\r\n const handleModalConfirmInModal = (groupIdsToAdd: string[], groupIdsToRemove: string[], newGroupName?: string) => {\r\n if (!cartItem) return\r\n\r\n // Create new group if needed\r\n if (newGroupName) {\r\n const newGroupId = generateGroupId()\r\n addGroup({ id: newGroupId, name: newGroupName })\r\n // Add item to the new group\r\n const cartItemWithGroup: IMediaRightItem = { ...cartItem, GroupId: newGroupId }\r\n addItem(cartItemWithGroup)\r\n } else {\r\n // Remove from groups\r\n groupIdsToRemove.forEach((groupId) => {\r\n if (cartItem.ProductId) {\r\n removeItem(groupId, cartItem.ProductId)\r\n }\r\n })\r\n\r\n // Add to groups\r\n groupIdsToAdd.forEach((groupId) => {\r\n const cartItemWithGroup: IMediaRightItem = { ...cartItem, GroupId: groupId }\r\n addItem(cartItemWithGroup)\r\n })\r\n }\r\n\r\n root.unmount()\r\n document.body.removeChild(modalContainer)\r\n }\r\n root.render(\r\n <GroupSelectorModal\r\n open={true}\r\n onClose={() => {\r\n root.unmount()\r\n document.body.removeChild(modalContainer)\r\n }}\r\n onConfirm={handleModalConfirmInModal}\r\n guideStepsProps={guideStepsProps}\r\n groups={groups}\r\n cartItem={cartItem}\r\n />\r\n )\r\n}\r\n"],"names":["GroupSelectorModal","_ref","open","onClose","onConfirm","groups","guideStepsProps","cartItem","currentGroupIds","useMemo","ProductId","filter","g","_g$items","items","some","item","map","id","sort","initialGroupIds","length","_useState","useState","_useState2","_slicedToArray","selectedGroupIds","setSelectedGroupIds","_useState3","_useState4","showNewGroupInput","setShowNewGroupInput","_useState5","_useState6","newName","setNewName","useEffect","newInitialGroupIds","isChanged","trim","sortedSelected","_toConsumableArray","index","handleClose","_jsxs","Dialog","maxWidth","fullWidth","disableScrollLock","keepMounted","scroll","children","_jsx","ModalHeader","Box","component","onSubmit","e","preventDefault","groupIdsToAdd","includes","groupIdsToRemove","DialogContent","Typography","variant","sx","mb","fontWeight","canAddGroup","NewCollectionInput","value","onChange","NewCollectionButton","onClick","CollectionsList","onGroupSelect","groupId","prev","concat","DialogActions","px","pb","GuideSteps","_objectSpread","iconButtonProps","color","mr","Button","type","disabled","minWidth","showGroupSelectorModal","_ref2","addGroup","addItem","removeItem","modalContainer","document","createElement","body","appendChild","root","createRoot","render","unmount","removeChild","newGroupName","newGroupId","generateGroupId","name","cartItemWithGroup","GroupId","forEach"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as e}from"react/jsx-runtime";import{DialogTitle as i,Box as t,Avatar as a,Typography as l,IconButton as n}from"@mui/material";import o from"@mui/icons-material/VideoLibraryOutlined";import c from"@mui/icons-material/Close";var d=function(d){var m=d.cartItem,s=d.onClose;return r(i,{children:e(t,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[e(t,{sx:{display:"flex",alignItems:"center",gap:1},children:[null!=m&&m.PictureUrl?r(a,{src:m.PictureUrl,alt:m.ProductName||"Product",sx:{width:60,height:60,borderRadius:2}}):r(o,{}),e(t,{children:[r(l,{variant:"h6",children:"Add to Media Rights Package"}),r(l,{variant:"body2",color:"text.secondary",children:null==m?void 0:m.ProductName})]})]}),r(n,{onClick:s,size:"small",children:r(c,{})})]})})};export{d as ModalHeader};
1
+ import{jsx as r,jsxs as e}from"react/jsx-runtime";import{DialogTitle as i,Box as t,Avatar as l,Typography as a,IconButton as n}from"@mui/material";import o from"@mui/icons-material/VideoLibraryOutlined";import c from"@mui/icons-material/Close";var d=function(d){var m=d.cartItem,s=d.onClose;return r(i,{children:e(t,{sx:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[e(t,{sx:{display:"flex",alignItems:"center",gap:1},children:[null!=m&&m.PictureUrl?r(l,{src:m.PictureUrl,alt:m.ProductName||"Product",sx:{width:60,height:60,borderRadius:2}}):r(o,{}),e(t,{children:[r(a,{variant:"h6",children:"Add to Playlist"}),r(a,{variant:"body2",color:"text.secondary",children:null==m?void 0:m.ProductName})]})]}),r(n,{onClick:s,size:"small",children:r(c,{})})]})})};export{d as ModalHeader};
2
2
  //# sourceMappingURL=modal-header.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"modal-header.js","sources":["../../../src/media-right/group-selector/modal-header.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport { DialogTitle, Box, Typography, IconButton, Avatar } from '@mui/material'\r\nimport VideoLibraryOutlinedIcon from '@mui/icons-material/VideoLibraryOutlined'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport type { IMediaRightItem } from '../types'\r\n\r\nexport interface ModalHeaderProps {\r\n cartItem: IMediaRightItem | null\r\n onClose: () => void\r\n}\r\n\r\nexport const ModalHeader: FC<ModalHeaderProps> = ({ cartItem, onClose }) => {\r\n return (\r\n <DialogTitle>\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n {cartItem?.PictureUrl ? (\r\n <Avatar src={cartItem.PictureUrl} alt={cartItem.ProductName || 'Product'} sx={{ width: 60, height: 60, borderRadius: 2 }} />\r\n ) : (\r\n <VideoLibraryOutlinedIcon />\r\n )}\r\n <Box>\r\n <Typography variant='h6'>Add to Media Rights Package</Typography>\r\n <Typography variant='body2' color='text.secondary'>\r\n {cartItem?.ProductName}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n <IconButton onClick={onClose} size='small'>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n )\r\n}\r\n"],"names":["ModalHeader","_ref","cartItem","onClose","_jsx","DialogTitle","children","_jsxs","Box","sx","display","alignItems","justifyContent","gap","PictureUrl","Avatar","src","alt","ProductName","width","height","borderRadius","VideoLibraryOutlinedIcon","Typography","variant","color","IconButton","onClick","size","CloseIcon"],"mappings":"wPAWaA,EAAoC,SAAzBC,GAAmD,IAAvBC,EAAQD,EAARC,SAAUC,EAAOF,EAAPE,QAC5D,OACEC,EAACC,EAAW,CAAAC,SACVC,EAACC,EAAI,CAAAC,GAAI,CAAEC,QAAS,OAAQC,WAAY,SAAUC,eAAgB,iBAChEN,SAAA,CAAAC,EAACC,EAAG,CAACC,GAAI,CAAEC,QAAS,OAAQC,WAAY,SAAUE,IAAK,GAAGP,SAAA,CACvDJ,SAAAA,EAAUY,WACTV,EAACW,EAAO,CAAAC,IAAKd,EAASY,WAAYG,IAAKf,EAASgB,aAAe,UAAWT,GAAI,CAAEU,MAAO,GAAIC,OAAQ,GAAIC,aAAc,KAErHjB,EAACkB,EAA2B,CAAA,GAE9Bf,EAACC,EACC,CAAAF,SAAA,CAAAF,EAACmB,EAAU,CAACC,QAAQ,KAAIlB,SAAA,gCACxBF,EAACmB,EAAW,CAAAC,QAAQ,QAAQC,MAAM,iBAAgBnB,SAC/CJ,aAAQ,EAARA,EAAUgB,oBAIjBd,EAACsB,EAAW,CAAAC,QAASxB,EAASyB,KAAK,QAAOtB,SACxCF,EAACyB,EAAY,CAAA,SAKvB"}
1
+ {"version":3,"file":"modal-header.js","sources":["../../../src/media-right/group-selector/modal-header.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport { DialogTitle, Box, Typography, IconButton, Avatar } from '@mui/material'\r\nimport VideoLibraryOutlinedIcon from '@mui/icons-material/VideoLibraryOutlined'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport type { IMediaRightItem } from '../types'\r\n\r\nexport interface ModalHeaderProps {\r\n cartItem: IMediaRightItem | null\r\n onClose: () => void\r\n}\r\n\r\nexport const ModalHeader: FC<ModalHeaderProps> = ({ cartItem, onClose }) => {\r\n return (\r\n <DialogTitle>\r\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\r\n {cartItem?.PictureUrl ? (\r\n <Avatar src={cartItem.PictureUrl} alt={cartItem.ProductName || 'Product'} sx={{ width: 60, height: 60, borderRadius: 2 }} />\r\n ) : (\r\n <VideoLibraryOutlinedIcon />\r\n )}\r\n <Box>\r\n <Typography variant='h6'>Add to Playlist</Typography>\r\n <Typography variant='body2' color='text.secondary'>\r\n {cartItem?.ProductName}\r\n </Typography>\r\n </Box>\r\n </Box>\r\n <IconButton onClick={onClose} size='small'>\r\n <CloseIcon />\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n )\r\n}\r\n"],"names":["ModalHeader","_ref","cartItem","onClose","_jsx","DialogTitle","children","_jsxs","Box","sx","display","alignItems","justifyContent","gap","PictureUrl","Avatar","src","alt","ProductName","width","height","borderRadius","VideoLibraryOutlinedIcon","Typography","variant","color","IconButton","onClick","size","CloseIcon"],"mappings":"wPAWaA,EAAoC,SAAzBC,GAAmD,IAAvBC,EAAQD,EAARC,SAAUC,EAAOF,EAAPE,QAC5D,OACEC,EAACC,EAAW,CAAAC,SACVC,EAACC,EAAI,CAAAC,GAAI,CAAEC,QAAS,OAAQC,WAAY,SAAUC,eAAgB,iBAChEN,SAAA,CAAAC,EAACC,EAAG,CAACC,GAAI,CAAEC,QAAS,OAAQC,WAAY,SAAUE,IAAK,GAAGP,SAAA,CACvDJ,SAAAA,EAAUY,WACTV,EAACW,EAAO,CAAAC,IAAKd,EAASY,WAAYG,IAAKf,EAASgB,aAAe,UAAWT,GAAI,CAAEU,MAAO,GAAIC,OAAQ,GAAIC,aAAc,KAErHjB,EAACkB,EAA2B,CAAA,GAE9Bf,EAACC,EACC,CAAAF,SAAA,CAAAF,EAACmB,EAAU,CAACC,QAAQ,KAAIlB,SAAA,oBACxBF,EAACmB,EAAW,CAAAC,QAAQ,QAAQC,MAAM,iBAAgBnB,SAC/CJ,aAAQ,EAARA,EAAUgB,oBAIjBd,EAACsB,EAAW,CAAAC,QAASxB,EAASyB,KAAK,QAAOtB,SACxCF,EAACyB,EAAY,CAAA,SAKvB"}
@@ -1,2 +1,2 @@
1
- import{jsxs as e,jsx as r}from"react/jsx-runtime";import{Box as i,Typography as t,List as n,ListItem as o,ListItemButton as a,Checkbox as l,Stack as c,Chip as d}from"@mui/material";import s from"@mui/icons-material/FolderOutlined";var m=function(i){var n=i.group,m=i.isSelected,u=i.onSelect;return r(o,{disablePadding:!0,children:e(a,{selected:m,onClick:function(){return u(n.id)},sx:{gap:1,borderRadius:1,"&.Mui-selected":{bgcolor:"primary.50","&:hover":{bgcolor:"primary.100"}}},children:[r(l,{checked:m,size:"small"}),r(s,{fontSize:"small"}),e(c,{direction:"row",gap:1,sx:{minWidth:0,flexGrow:1,alignItems:"center",justifyContent:"space-between"},children:[r(t,{variant:"body2",noWrap:!0,children:n.name}),r(d,{label:"".concat(n.items.length," items"),size:"small"})]})]})})},u=function(o){var a=o.groups,l=o.selectedGroupIds,c=o.onGroupSelect;return 0===a.length?e(i,{sx:{textAlign:"center",py:2,color:"text.secondary"},children:[r(s,{sx:{fontSize:48,mb:1,opacity:.5}}),r(t,{variant:"body2",children:"No Media Rights Packages yet. Create your first package!"})]}):r(n,{sx:{maxHeight:300,overflow:"auto"},children:a.map(function(e){return r(m,{group:e,isSelected:l.includes(e.id),onSelect:c},e.id)})})};export{u as CollectionsList};
1
+ import{jsxs as e,jsx as r}from"react/jsx-runtime";import{Box as t,Typography as i,List as n,ListItem as o,ListItemButton as l,Checkbox as a,Stack as c,Chip as s}from"@mui/material";import d from"@mui/icons-material/FolderOutlined";var m=function(t){var n=t.group,m=t.isSelected,u=t.onSelect;return r(o,{disablePadding:!0,children:e(l,{selected:m,onClick:function(){return u(n.id)},sx:{gap:1,borderRadius:1,"&.Mui-selected":{bgcolor:"primary.50","&:hover":{bgcolor:"primary.100"}}},children:[r(a,{checked:m,size:"small"}),r(d,{fontSize:"small"}),e(c,{direction:"row",gap:1,sx:{minWidth:0,flexGrow:1,alignItems:"center",justifyContent:"space-between"},children:[r(i,{variant:"body2",noWrap:!0,children:n.name}),r(s,{label:"".concat(n.items.length," items"),size:"small"})]})]})})},u=function(o){var l=o.groups,a=o.selectedGroupIds,c=o.onGroupSelect;return 0===l.length?e(t,{sx:{textAlign:"center",py:2,color:"text.secondary"},children:[r(d,{sx:{fontSize:48,mb:1,opacity:.5}}),r(i,{variant:"body2",children:"No playlist yet. Create your first playlist!"})]}):r(n,{sx:{maxHeight:300,overflow:"auto"},children:l.map(function(e){return r(m,{group:e,isSelected:a.includes(e.id),onSelect:c},e.id)})})};export{u as CollectionsList};
2
2
  //# sourceMappingURL=units.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"units.js","sources":["../../../src/media-right/group-selector/units.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport { List, Box, Typography, ListItem, ListItemButton, Checkbox, Stack, Chip } from '@mui/material'\r\nimport FolderOutlinedIcon from '@mui/icons-material/FolderOutlined'\r\nimport type { IMediaRightGroup } from '../types'\r\n\r\nexport interface CollectionItemProps {\r\n group: IMediaRightGroup\r\n isSelected: boolean\r\n onSelect: (groupId: string) => void\r\n}\r\n\r\nconst CollectionItem: FC<CollectionItemProps> = ({ group, isSelected, onSelect }) => {\r\n return (\r\n <ListItem disablePadding>\r\n <ListItemButton\r\n selected={isSelected}\r\n onClick={() => onSelect(group.id)}\r\n sx={{\r\n gap: 1,\r\n borderRadius: 1,\r\n '&.Mui-selected': {\r\n bgcolor: 'primary.50',\r\n '&:hover': {\r\n bgcolor: 'primary.100'\r\n }\r\n }\r\n }}\r\n >\r\n <Checkbox checked={isSelected} size='small' />\r\n <FolderOutlinedIcon fontSize='small' />\r\n <Stack direction='row' gap={1} sx={{ minWidth: 0, flexGrow: 1, alignItems: 'center', justifyContent: 'space-between' }}>\r\n <Typography variant='body2' noWrap>\r\n {group.name}\r\n </Typography>\r\n <Chip label={`${group.items.length} items`} size='small' />\r\n </Stack>\r\n </ListItemButton>\r\n </ListItem>\r\n )\r\n}\r\n\r\nexport interface CollectionsListProps {\r\n groups: IMediaRightGroup[]\r\n selectedGroupIds: string[]\r\n onGroupSelect: (groupId: string) => void\r\n}\r\n\r\nexport const CollectionsList: FC<CollectionsListProps> = ({ groups, selectedGroupIds, onGroupSelect }) => {\r\n if (groups.length === 0) {\r\n return (\r\n <Box sx={{ textAlign: 'center', py: 2, color: 'text.secondary' }}>\r\n <FolderOutlinedIcon sx={{ fontSize: 48, mb: 1, opacity: 0.5 }} />\r\n <Typography variant='body2'>No Media Rights Packages yet. Create your first package!</Typography>\r\n </Box>\r\n )\r\n }\r\n\r\n return (\r\n <List sx={{ maxHeight: 300, overflow: 'auto' }}>\r\n {groups.map((group) => (\r\n <CollectionItem key={group.id} group={group} isSelected={selectedGroupIds.includes(group.id)} onSelect={onGroupSelect} />\r\n ))}\r\n </List>\r\n )\r\n}\r\n"],"names":["CollectionItem","_ref","group","isSelected","onSelect","_jsx","ListItem","disablePadding","children","_jsxs","ListItemButton","selected","onClick","id","sx","gap","borderRadius","bgcolor","Checkbox","checked","size","FolderOutlinedIcon","fontSize","Stack","direction","minWidth","flexGrow","alignItems","justifyContent","Typography","variant","noWrap","name","Chip","label","concat","items","length","CollectionsList","_ref2","groups","selectedGroupIds","onGroupSelect","Box","textAlign","py","color","mb","opacity","List","maxHeight","overflow","map","includes"],"mappings":"uOAWA,IAAMA,EAA0C,SAA5BC,GAAgE,IAAjCC,EAAKD,EAALC,MAAOC,EAAUF,EAAVE,WAAYC,EAAQH,EAARG,SACpE,OACEC,EAACC,EAAS,CAAAC,gBACR,EAAAC,SAAAC,EAACC,EAAc,CACbC,SAAUR,EACVS,QAAS,WAAF,OAAQR,EAASF,EAAMW,GAAG,EACjCC,GAAI,CACFC,IAAK,EACLC,aAAc,EACd,iBAAkB,CAChBC,QAAS,aACT,UAAW,CACTA,QAAS,iBAGdT,SAAA,CAEDH,EAACa,EAAQ,CAACC,QAAShB,EAAYiB,KAAK,UACpCf,EAACgB,GAAmBC,SAAS,UAC7Bb,EAACc,GAAMC,UAAU,MAAMT,IAAK,EAAGD,GAAI,CAAEW,SAAU,EAAGC,SAAU,EAAGC,WAAY,SAAUC,eAAgB,iBAAiBpB,SAAA,CACpHH,EAACwB,EAAU,CAACC,QAAQ,QAAQC,mBACzB7B,EAAM8B,OAET3B,EAAC4B,GAAKC,MAAK,GAAAC,OAAKjC,EAAMkC,MAAMC,OAAc,UAAEjB,KAAK,iBAK3D,EAQakB,EAA4C,SAA7BC,GAA6E,IAA7CC,EAAMD,EAANC,OAAQC,EAAgBF,EAAhBE,iBAAkBC,EAAaH,EAAbG,cACpF,OAAsB,IAAlBF,EAAOH,OAEP5B,EAACkC,EAAG,CAAC7B,GAAI,CAAE8B,UAAW,SAAUC,GAAI,EAAGC,MAAO,kBAAkBtC,SAAA,CAC9DH,EAACgB,EAAmB,CAAAP,GAAI,CAAEQ,SAAU,GAAIyB,GAAI,EAAGC,QAAS,MACxD3C,EAACwB,EAAW,CAAAC,QAAQ,QAAOtB,SAAA,gEAM/BH,EAAC4C,EAAK,CAAAnC,GAAI,CAAEoC,UAAW,IAAKC,SAAU,QAAQ3C,SAC3CgC,EAAOY,IAAI,SAAClD,GAAK,OAChBG,EAACL,GAA8BE,MAAOA,EAAOC,WAAYsC,EAAiBY,SAASnD,EAAMW,IAAKT,SAAUsC,GAAnFxC,EAAMW,GAC5B,IAGP"}
1
+ {"version":3,"file":"units.js","sources":["../../../src/media-right/group-selector/units.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport { List, Box, Typography, ListItem, ListItemButton, Checkbox, Stack, Chip } from '@mui/material'\r\nimport FolderOutlinedIcon from '@mui/icons-material/FolderOutlined'\r\nimport type { IMediaRightGroup } from '../types'\r\n\r\nexport interface CollectionItemProps {\r\n group: IMediaRightGroup\r\n isSelected: boolean\r\n onSelect: (groupId: string) => void\r\n}\r\n\r\nconst CollectionItem: FC<CollectionItemProps> = ({ group, isSelected, onSelect }) => {\r\n return (\r\n <ListItem disablePadding>\r\n <ListItemButton\r\n selected={isSelected}\r\n onClick={() => onSelect(group.id)}\r\n sx={{\r\n gap: 1,\r\n borderRadius: 1,\r\n '&.Mui-selected': {\r\n bgcolor: 'primary.50',\r\n '&:hover': {\r\n bgcolor: 'primary.100'\r\n }\r\n }\r\n }}\r\n >\r\n <Checkbox checked={isSelected} size='small' />\r\n <FolderOutlinedIcon fontSize='small' />\r\n <Stack direction='row' gap={1} sx={{ minWidth: 0, flexGrow: 1, alignItems: 'center', justifyContent: 'space-between' }}>\r\n <Typography variant='body2' noWrap>\r\n {group.name}\r\n </Typography>\r\n <Chip label={`${group.items.length} items`} size='small' />\r\n </Stack>\r\n </ListItemButton>\r\n </ListItem>\r\n )\r\n}\r\n\r\nexport interface CollectionsListProps {\r\n groups: IMediaRightGroup[]\r\n selectedGroupIds: string[]\r\n onGroupSelect: (groupId: string) => void\r\n}\r\n\r\nexport const CollectionsList: FC<CollectionsListProps> = ({ groups, selectedGroupIds, onGroupSelect }) => {\r\n if (groups.length === 0) {\r\n return (\r\n <Box sx={{ textAlign: 'center', py: 2, color: 'text.secondary' }}>\r\n <FolderOutlinedIcon sx={{ fontSize: 48, mb: 1, opacity: 0.5 }} />\r\n <Typography variant='body2'>No playlist yet. Create your first playlist!</Typography>\r\n </Box>\r\n )\r\n }\r\n\r\n return (\r\n <List sx={{ maxHeight: 300, overflow: 'auto' }}>\r\n {groups.map((group) => (\r\n <CollectionItem key={group.id} group={group} isSelected={selectedGroupIds.includes(group.id)} onSelect={onGroupSelect} />\r\n ))}\r\n </List>\r\n )\r\n}\r\n"],"names":["CollectionItem","_ref","group","isSelected","onSelect","_jsx","ListItem","disablePadding","children","_jsxs","ListItemButton","selected","onClick","id","sx","gap","borderRadius","bgcolor","Checkbox","checked","size","FolderOutlinedIcon","fontSize","Stack","direction","minWidth","flexGrow","alignItems","justifyContent","Typography","variant","noWrap","name","Chip","label","concat","items","length","CollectionsList","_ref2","groups","selectedGroupIds","onGroupSelect","Box","textAlign","py","color","mb","opacity","List","maxHeight","overflow","map","includes"],"mappings":"uOAWA,IAAMA,EAA0C,SAA5BC,GAAgE,IAAjCC,EAAKD,EAALC,MAAOC,EAAUF,EAAVE,WAAYC,EAAQH,EAARG,SACpE,OACEC,EAACC,EAAS,CAAAC,gBACR,EAAAC,SAAAC,EAACC,EAAc,CACbC,SAAUR,EACVS,QAAS,WAAF,OAAQR,EAASF,EAAMW,GAAG,EACjCC,GAAI,CACFC,IAAK,EACLC,aAAc,EACd,iBAAkB,CAChBC,QAAS,aACT,UAAW,CACTA,QAAS,iBAGdT,SAAA,CAEDH,EAACa,EAAQ,CAACC,QAAShB,EAAYiB,KAAK,UACpCf,EAACgB,GAAmBC,SAAS,UAC7Bb,EAACc,GAAMC,UAAU,MAAMT,IAAK,EAAGD,GAAI,CAAEW,SAAU,EAAGC,SAAU,EAAGC,WAAY,SAAUC,eAAgB,iBAAiBpB,SAAA,CACpHH,EAACwB,EAAU,CAACC,QAAQ,QAAQC,mBACzB7B,EAAM8B,OAET3B,EAAC4B,GAAKC,MAAK,GAAAC,OAAKjC,EAAMkC,MAAMC,OAAc,UAAEjB,KAAK,iBAK3D,EAQakB,EAA4C,SAA7BC,GAA6E,IAA7CC,EAAMD,EAANC,OAAQC,EAAgBF,EAAhBE,iBAAkBC,EAAaH,EAAbG,cACpF,OAAsB,IAAlBF,EAAOH,OAEP5B,EAACkC,EAAG,CAAC7B,GAAI,CAAE8B,UAAW,SAAUC,GAAI,EAAGC,MAAO,kBAAkBtC,SAAA,CAC9DH,EAACgB,EAAmB,CAAAP,GAAI,CAAEQ,SAAU,GAAIyB,GAAI,EAAGC,QAAS,MACxD3C,EAACwB,EAAW,CAAAC,QAAQ,QAAOtB,SAAA,oDAM/BH,EAAC4C,EAAK,CAAAnC,GAAI,CAAEoC,UAAW,IAAKC,SAAU,QAAQ3C,SAC3CgC,EAAOY,IAAI,SAAClD,GAAK,OAChBG,EAACL,GAA8BE,MAAOA,EAAOC,WAAYsC,EAAiBY,SAASnD,EAAMW,IAAKT,SAAUsC,GAAnFxC,EAAMW,GAC5B,IAGP"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as r,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as t,Fragment as n}from"react/jsx-runtime";import{useState as i,Fragment as a}from"react";import{Badge as l,Stack as c,Typography as m,Button as u}from"@mui/material";import p from"@mui/icons-material/PlaylistPlay";import s from"@mui/icons-material/DriveFileMoveOutlined";import{EmptyState as d}from"./units.js";import{NewGroupArea as h}from"./new-group-area.js";import{canAddGroup as f,generateGroupId as g}from"../helpers.js";import{MenuStyled as v,mediaWidgetClasses as P}from"./styled.js";import{IconButtonDark as j}from"../../components/buttons.js";import{MediaGroupAccordion as C}from"./media-group-accordion.js";import{ItemTitlePropsContext as G}from"./item-title-props-context.js";import{useMediaRightStore as k,useMediaRightActions as y}from"../hooks.js";var T=function(T){var b,S=T.localStorageKey,M=T.hrefCart,x=T.buttonMoveToCartProps,D=T.onDetailClick,N=k({localStorageKey:S}).groups,z=y({localStorageKey:S}),K=i(null),O=r(K,2),w=O[0],B=O[1],E=i(!1),F=r(E,2),I=F[0],L=F[1],_=function(r){z.addGroup({name:r,id:g()})},A=function(r){z.updateGroup(r.id,r)},H=function(r){z.removeGroup(r)},R=function(r,o){z.removeItem(r,o)};return e(a,{children:[t(j,{onClick:function(r){return B(r.currentTarget)},children:t(l,{badgeContent:N.length||0,color:"error",children:t(p,{})})}),t(v,{disableScrollLock:!0,anchorEl:w,open:Boolean(w),onClose:function(){return B(null)},anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{component:"div"},children:t(G.Provider,{value:{itemTitleProps:T.itemTitleProps,itemTitlePropsGetter:T.itemTitlePropsGetter,onClose:function(){return B(null)}},children:e(n,{children:[e(c,{spacing:1,className:P.header,children:[e(m,{variant:"h6",component:"span",className:P.headerText,children:["Your Media Rights Package (",null!==(b=N.length)&&void 0!==b?b:0," Package",N.length>1?"s":"",")"]}),f(N)&&t(h,{onSaveGroup:_})]}),0===N.length?t(d,{}):N.map(function(r){return t(C,{group:r,onEditGroup:A,onDeleteGroup:H,onDeleteMedia:R,accordionProps:{expanded:I===r.id,onChange:function(o,e){return L(!!e&&r.id)}}},r.id)}),t(c,{className:P.footer,children:t(u,o(o(o({},M?{component:"a",href:M}:{}),{},{color:"inherit",size:"small",endIcon:t(s,{}),onClick:function(r){B(null),D&&D(r)},disabled:N.length<1},x),{},{children:"Show Package"}))})]})})})]})},b=function(r){var e=function(e){return t(T,o(o({},r),e))};return e.displayName="MediaGroupWidget",e};export{T as MediaGroupWidget,b as createMediaGroupWidget};
1
+ import{slicedToArray as r,objectSpread2 as o}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as t,Fragment as n}from"react/jsx-runtime";import{useState as i,Fragment as l}from"react";import{Badge as a,Stack as c,Typography as m,Button as p}from"@mui/material";import s from"@mui/icons-material/PlaylistPlay";import u from"@mui/icons-material/DriveFileMoveOutlined";import{EmptyState as d}from"./units.js";import{NewGroupArea as f}from"./new-group-area.js";import{canAddGroup as h,generateGroupId as g}from"../helpers.js";import{MenuStyled as v,mediaWidgetClasses as P}from"./styled.js";import{IconButtonDark as j}from"../../components/buttons.js";import{MediaGroupAccordion as y}from"./media-group-accordion.js";import{ItemTitlePropsContext as C}from"./item-title-props-context.js";import{useMediaRightStore as G,useMediaRightActions as T}from"../hooks.js";var b=function(b){var S,k=b.localStorageKey,x=b.hrefCart,M=b.buttonMoveToCartProps,D=b.onDetailClick,N=G({localStorageKey:k}).groups,z=T({localStorageKey:k}),K=i(null),O=r(K,2),w=O[0],B=O[1],E=i(!1),F=r(E,2),I=F[0],L=F[1],_=function(r){z.addGroup({name:r,id:g()})},A=function(r){z.updateGroup(r.id,r)},H=function(r){z.removeGroup(r)},W=function(r,o){z.removeItem(r,o)};return e(l,{children:[t(j,{onClick:function(r){return B(r.currentTarget)},children:t(a,{badgeContent:N.length||0,color:"error",children:t(s,{})})}),t(v,{disableScrollLock:!0,anchorEl:w,open:Boolean(w),onClose:function(){return B(null)},anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{component:"div"},children:t(C.Provider,{value:{itemTitleProps:b.itemTitleProps,itemTitlePropsGetter:b.itemTitlePropsGetter,onClose:function(){return B(null)}},children:e(n,{children:[e(c,{spacing:1,className:P.header,children:[e(m,{variant:"h6",component:"span",className:P.headerText,children:["Your playlist (",null!==(S=N.length)&&void 0!==S?S:0," playlist",N.length>1?"s":"",")"]}),h(N)&&t(f,{onSaveGroup:_})]}),0===N.length?t(d,{}):N.map(function(r){return t(y,{group:r,onEditGroup:A,onDeleteGroup:H,onDeleteMedia:W,accordionProps:{expanded:I===r.id,onChange:function(o,e){return L(!!e&&r.id)}}},r.id)}),t(c,{className:P.footer,children:t(p,o(o(o({},x?{component:"a",href:x}:{}),{},{color:"inherit",size:"small",endIcon:t(u,{}),onClick:function(r){B(null),D&&D(r)},disabled:N.length<1},M),{},{children:"Show Playlist"}))})]})})})]})},S=function(r){var e=function(e){return t(b,o(o({},r),e))};return e.displayName="MediaGroupWidget",e};export{b as MediaGroupWidget,S as createMediaGroupWidget};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/media-right/media-widget/index.tsx"],"sourcesContent":["import { Fragment, useState } from 'react'\r\nimport { Badge, Button, ButtonProps, Stack, Typography } from '@mui/material'\r\nimport PlaylistPlayIcon from '@mui/icons-material/PlaylistPlay'\r\nimport DriveFileMoveOutlinedIcon from '@mui/icons-material/DriveFileMoveOutlined'\r\nimport { EmptyState } from './units'\r\nimport { NewGroupArea } from './new-group-area'\r\nimport { canAddGroup, generateGroupId } from '../helpers'\r\nimport { mediaWidgetClasses, MenuStyled } from './styled'\r\nimport { IconButtonDark } from '../../components/buttons'\r\nimport { MediaGroupAccordion } from './media-group-accordion'\r\nimport { ItemTitlePropsContext } from './item-title-props-context'\r\nimport { useMediaRightStore, useMediaRightActions } from '../hooks'\r\nimport type { IMediaRightGroup } from '../types'\r\nimport type { ITitlePropsContextValue } from './item-title-props-context'\r\n\r\nexport interface IMediaGroupWidgetProps extends ITitlePropsContextValue {\r\n localStorageKey?: string\r\n hrefCart?: string\r\n buttonMoveToCartProps?: ButtonProps & { [key: string]: any }\r\n onDetailClick?: ButtonProps['onClick']\r\n}\r\n\r\nexport const MediaGroupWidget: React.FC<IMediaGroupWidgetProps> = (props) => {\r\n const { localStorageKey, hrefCart, buttonMoveToCartProps, onDetailClick } = props\r\n const { groups } = useMediaRightStore({ localStorageKey })\r\n const actions = useMediaRightActions({ localStorageKey })\r\n\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const [expandedGroupId, setExpandedGroupId] = useState<string | false>(false)\r\n\r\n const handleSaveNewGroup = (groupName: string) => {\r\n actions.addGroup({\r\n name: groupName,\r\n id: generateGroupId()\r\n })\r\n }\r\n\r\n const handleEditGroup = (group: IMediaRightGroup) => {\r\n actions.updateGroup(group.id, group)\r\n }\r\n\r\n const handleDeleteGroup = (groupId: string) => {\r\n actions.removeGroup(groupId)\r\n }\r\n\r\n const handleDeleteMedia = (groupId: string, productId: string) => {\r\n actions.removeItem(groupId, productId)\r\n }\r\n\r\n const renderContent = () => {\r\n return (\r\n <>\r\n <Stack spacing={1} className={mediaWidgetClasses.header}>\r\n <Typography variant='h6' component='span' className={mediaWidgetClasses.headerText}>\r\n Your Media Rights Package ({groups.length ?? 0} Package{groups.length > 1 ? 's' : ''})\r\n </Typography>\r\n {canAddGroup(groups) && <NewGroupArea onSaveGroup={handleSaveNewGroup} />}\r\n </Stack>\r\n {/* <Divider /> */}\r\n {groups.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n groups.map((group) => (\r\n <MediaGroupAccordion\r\n key={group.id}\r\n group={group}\r\n onEditGroup={handleEditGroup}\r\n onDeleteGroup={handleDeleteGroup}\r\n onDeleteMedia={handleDeleteMedia}\r\n accordionProps={{\r\n expanded: expandedGroupId === group.id,\r\n onChange: (_, isExpanded) => setExpandedGroupId(isExpanded ? group.id : false)\r\n }}\r\n />\r\n ))\r\n )}\r\n {/* <Divider /> */}\r\n <Stack className={mediaWidgetClasses.footer}>\r\n <Button\r\n {...(hrefCart ? { component: 'a', href: hrefCart } : {})}\r\n color='inherit'\r\n size='small'\r\n endIcon={<DriveFileMoveOutlinedIcon />}\r\n onClick={(e) => {\r\n setAnchorEl(null)\r\n if (onDetailClick) onDetailClick(e)\r\n }}\r\n disabled={groups.length < 1}\r\n {...buttonMoveToCartProps}\r\n >\r\n Show Package\r\n </Button>\r\n </Stack>\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <IconButtonDark onClick={(e) => setAnchorEl(e.currentTarget)}>\r\n <Badge badgeContent={groups.length || 0} color='error'>\r\n <PlaylistPlayIcon />\r\n </Badge>\r\n </IconButtonDark>\r\n <MenuStyled\r\n disableScrollLock\r\n anchorEl={anchorEl}\r\n open={Boolean(anchorEl)}\r\n onClose={() => setAnchorEl(null)}\r\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n MenuListProps={{ component: 'div' }}\r\n >\r\n <ItemTitlePropsContext.Provider\r\n value={{\r\n itemTitleProps: props.itemTitleProps,\r\n itemTitlePropsGetter: props.itemTitlePropsGetter,\r\n onClose: () => setAnchorEl(null)\r\n }}\r\n >\r\n {renderContent()}\r\n </ItemTitlePropsContext.Provider>\r\n </MenuStyled>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport const createMediaGroupWidget = (params: IMediaGroupWidgetProps) => {\r\n const _MediaGroupWidget: React.FC<Partial<IMediaGroupWidgetProps>> = (props) => <MediaGroupWidget {...params} {...props} />\r\n _MediaGroupWidget.displayName = 'MediaGroupWidget'\r\n return _MediaGroupWidget\r\n}\r\n"],"names":["MediaGroupWidget","props","_groups$length","localStorageKey","hrefCart","buttonMoveToCartProps","onDetailClick","groups","useMediaRightStore","actions","useMediaRightActions","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","_useState3","_useState4","expandedGroupId","setExpandedGroupId","handleSaveNewGroup","groupName","addGroup","name","id","generateGroupId","handleEditGroup","group","updateGroup","handleDeleteGroup","groupId","removeGroup","handleDeleteMedia","productId","removeItem","_jsxs","Fragment","children","_jsx","IconButtonDark","onClick","e","currentTarget","Badge","badgeContent","length","color","PlaylistPlayIcon","MenuStyled","disableScrollLock","open","Boolean","onClose","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","component","ItemTitlePropsContext","Provider","value","itemTitleProps","itemTitlePropsGetter","_Fragment","Stack","spacing","className","mediaWidgetClasses","header","Typography","variant","headerText","canAddGroup","NewGroupArea","onSaveGroup","EmptyState","map","MediaGroupAccordion","onEditGroup","onDeleteGroup","onDeleteMedia","accordionProps","expanded","onChange","_","isExpanded","footer","Button","_objectSpread","href","size","endIcon","DriveFileMoveOutlinedIcon","disabled","createMediaGroupWidget","params","_MediaGroupWidget","displayName"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/media-right/media-widget/index.tsx"],"sourcesContent":["import { Fragment, useState } from 'react'\r\nimport { Badge, Button, ButtonProps, Stack, Typography } from '@mui/material'\r\nimport PlaylistPlayIcon from '@mui/icons-material/PlaylistPlay'\r\nimport DriveFileMoveOutlinedIcon from '@mui/icons-material/DriveFileMoveOutlined'\r\nimport { EmptyState } from './units'\r\nimport { NewGroupArea } from './new-group-area'\r\nimport { canAddGroup, generateGroupId } from '../helpers'\r\nimport { mediaWidgetClasses, MenuStyled } from './styled'\r\nimport { IconButtonDark } from '../../components/buttons'\r\nimport { MediaGroupAccordion } from './media-group-accordion'\r\nimport { ItemTitlePropsContext } from './item-title-props-context'\r\nimport { useMediaRightStore, useMediaRightActions } from '../hooks'\r\nimport type { IMediaRightGroup } from '../types'\r\nimport type { ITitlePropsContextValue } from './item-title-props-context'\r\n\r\nexport interface IMediaGroupWidgetProps extends ITitlePropsContextValue {\r\n localStorageKey?: string\r\n hrefCart?: string\r\n buttonMoveToCartProps?: ButtonProps & { [key: string]: any }\r\n onDetailClick?: ButtonProps['onClick']\r\n}\r\n\r\nexport const MediaGroupWidget: React.FC<IMediaGroupWidgetProps> = (props) => {\r\n const { localStorageKey, hrefCart, buttonMoveToCartProps, onDetailClick } = props\r\n const { groups } = useMediaRightStore({ localStorageKey })\r\n const actions = useMediaRightActions({ localStorageKey })\r\n\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const [expandedGroupId, setExpandedGroupId] = useState<string | false>(false)\r\n\r\n const handleSaveNewGroup = (groupName: string) => {\r\n actions.addGroup({\r\n name: groupName,\r\n id: generateGroupId()\r\n })\r\n }\r\n\r\n const handleEditGroup = (group: IMediaRightGroup) => {\r\n actions.updateGroup(group.id, group)\r\n }\r\n\r\n const handleDeleteGroup = (groupId: string) => {\r\n actions.removeGroup(groupId)\r\n }\r\n\r\n const handleDeleteMedia = (groupId: string, productId: string) => {\r\n actions.removeItem(groupId, productId)\r\n }\r\n\r\n const renderContent = () => {\r\n return (\r\n <>\r\n <Stack spacing={1} className={mediaWidgetClasses.header}>\r\n <Typography variant='h6' component='span' className={mediaWidgetClasses.headerText}>\r\n Your playlist ({groups.length ?? 0} playlist{groups.length > 1 ? 's' : ''})\r\n </Typography>\r\n {canAddGroup(groups) && <NewGroupArea onSaveGroup={handleSaveNewGroup} />}\r\n </Stack>\r\n {/* <Divider /> */}\r\n {groups.length === 0 ? (\r\n <EmptyState />\r\n ) : (\r\n groups.map((group) => (\r\n <MediaGroupAccordion\r\n key={group.id}\r\n group={group}\r\n onEditGroup={handleEditGroup}\r\n onDeleteGroup={handleDeleteGroup}\r\n onDeleteMedia={handleDeleteMedia}\r\n accordionProps={{\r\n expanded: expandedGroupId === group.id,\r\n onChange: (_, isExpanded) => setExpandedGroupId(isExpanded ? group.id : false)\r\n }}\r\n />\r\n ))\r\n )}\r\n {/* <Divider /> */}\r\n <Stack className={mediaWidgetClasses.footer}>\r\n <Button\r\n {...(hrefCart ? { component: 'a', href: hrefCart } : {})}\r\n color='inherit'\r\n size='small'\r\n endIcon={<DriveFileMoveOutlinedIcon />}\r\n onClick={(e) => {\r\n setAnchorEl(null)\r\n if (onDetailClick) onDetailClick(e)\r\n }}\r\n disabled={groups.length < 1}\r\n {...buttonMoveToCartProps}\r\n >\r\n Show Playlist\r\n </Button>\r\n </Stack>\r\n </>\r\n )\r\n }\r\n\r\n return (\r\n <Fragment>\r\n <IconButtonDark onClick={(e) => setAnchorEl(e.currentTarget)}>\r\n <Badge badgeContent={groups.length || 0} color='error'>\r\n <PlaylistPlayIcon />\r\n </Badge>\r\n </IconButtonDark>\r\n <MenuStyled\r\n disableScrollLock\r\n anchorEl={anchorEl}\r\n open={Boolean(anchorEl)}\r\n onClose={() => setAnchorEl(null)}\r\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\r\n MenuListProps={{ component: 'div' }}\r\n >\r\n <ItemTitlePropsContext.Provider\r\n value={{\r\n itemTitleProps: props.itemTitleProps,\r\n itemTitlePropsGetter: props.itemTitlePropsGetter,\r\n onClose: () => setAnchorEl(null)\r\n }}\r\n >\r\n {renderContent()}\r\n </ItemTitlePropsContext.Provider>\r\n </MenuStyled>\r\n </Fragment>\r\n )\r\n}\r\n\r\nexport const createMediaGroupWidget = (params: IMediaGroupWidgetProps) => {\r\n const _MediaGroupWidget: React.FC<Partial<IMediaGroupWidgetProps>> = (props) => <MediaGroupWidget {...params} {...props} />\r\n _MediaGroupWidget.displayName = 'MediaGroupWidget'\r\n return _MediaGroupWidget\r\n}\r\n"],"names":["MediaGroupWidget","props","_groups$length","localStorageKey","hrefCart","buttonMoveToCartProps","onDetailClick","groups","useMediaRightStore","actions","useMediaRightActions","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","_useState3","_useState4","expandedGroupId","setExpandedGroupId","handleSaveNewGroup","groupName","addGroup","name","id","generateGroupId","handleEditGroup","group","updateGroup","handleDeleteGroup","groupId","removeGroup","handleDeleteMedia","productId","removeItem","_jsxs","Fragment","children","_jsx","IconButtonDark","onClick","e","currentTarget","Badge","badgeContent","length","color","PlaylistPlayIcon","MenuStyled","disableScrollLock","open","Boolean","onClose","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","component","ItemTitlePropsContext","Provider","value","itemTitleProps","itemTitlePropsGetter","_Fragment","Stack","spacing","className","mediaWidgetClasses","header","Typography","variant","headerText","canAddGroup","NewGroupArea","onSaveGroup","EmptyState","map","MediaGroupAccordion","onEditGroup","onDeleteGroup","onDeleteMedia","accordionProps","expanded","onChange","_","isExpanded","footer","Button","_objectSpread","href","size","endIcon","DriveFileMoveOutlinedIcon","disabled","createMediaGroupWidget","params","_MediaGroupWidget","displayName"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as t,jsxs as r}from"react/jsx-runtime";import{ImageWithFallback as i}from"dinocollab-core/components";import{useItemTitleProps as o}from"./item-title-props-context.js";import{Typography as l,List as a,ListItem as n}from"@mui/material";import{DeleteButton as c}from"./button.delete.js";import{mediaWidgetClasses as m}from"./styled.js";var s=function(s){var d=s.medias,p=s.onDelete,u=o()||{},f=u.itemTitleProps,h=u.itemTitlePropsGetter,x=u.onClose;return 0===d.length?t(l,{variant:"body2",color:"text.secondary",sx:{textAlign:"center",py:2},children:"No media in this package yet"}):t(a,{children:d.map(function(o){return r(n,{sx:{gap:1,alignItems:"center"},className:m.itemChild,children:[t(i,{src:null==o?void 0:o.PictureUrl,title:null==o?void 0:o.PictureUrl,fallbackSrc:"images/default-video.webp",alt:"product-picture",style:{width:"50px",height:"50px",borderRadius:3,objectFit:"cover",flex:"0 0 auto"}}),t(l,e(e({noWrap:!0,variant:"subtitle1",fontWeight:500,sx:{flexGrow:1},title:o.ProductName},h?h(o):null!=f?f:{}),{},{onClick:x,className:m.itemChildTitle,children:o.ProductName})),t(c,{onDelete:function(){return p(o.ProductId)},size:"small"})]},o.MediaId)})})};export{s as MediaList};
1
+ import{objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as t,jsxs as r}from"react/jsx-runtime";import{ImageWithFallback as i}from"dinocollab-core/components";import{useItemTitleProps as o}from"./item-title-props-context.js";import{Typography as l,List as n,ListItem as a}from"@mui/material";import{DeleteButton as m}from"./button.delete.js";import{mediaWidgetClasses as c}from"./styled.js";var s=function(s){var d=s.medias,p=s.onDelete,u=o()||{},f=u.itemTitleProps,h=u.itemTitlePropsGetter,x=u.onClose;return 0===d.length?t(l,{variant:"body2",color:"text.secondary",sx:{textAlign:"center",py:2},children:"No media in this playlist yet"}):t(n,{children:d.map(function(o){return r(a,{sx:{gap:1,alignItems:"center"},className:c.itemChild,children:[t(i,{src:null==o?void 0:o.PictureUrl,title:null==o?void 0:o.PictureUrl,fallbackSrc:"images/default-video.webp",alt:"product-picture",style:{width:"50px",height:"50px",borderRadius:3,objectFit:"cover",flex:"0 0 auto"}}),t(l,e(e({noWrap:!0,variant:"subtitle1",fontWeight:500,sx:{flexGrow:1},title:o.ProductName},h?h(o):null!=f?f:{}),{},{onClick:x,className:c.itemChildTitle,children:o.ProductName})),t(m,{onDelete:function(){return p(o.ProductId)},size:"small"})]},o.MediaId)})})};export{s as MediaList};
2
2
  //# sourceMappingURL=media-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media-list.js","sources":["../../../src/media-right/media-widget/media-list.tsx"],"sourcesContent":["import { ImageWithFallback } from 'dinocollab-core/components'\r\nimport { useItemTitleProps } from './item-title-props-context'\r\nimport { List, ListItem, Typography } from '@mui/material'\r\nimport type { FC } from 'react'\r\nimport type { IMediaRightItem } from '../types'\r\nimport { DeleteButton } from './button.delete'\r\nimport { mediaWidgetClasses } from './styled'\r\n\r\nexport interface IMediaListProps {\r\n medias: IMediaRightItem[]\r\n onDelete: (mediaId: string) => void\r\n}\r\n\r\nexport const MediaList: FC<IMediaListProps> = ({ medias, onDelete }) => {\r\n const { itemTitleProps, itemTitlePropsGetter, onClose } = useItemTitleProps() || {}\r\n\r\n if (medias.length === 0) {\r\n return (\r\n <Typography variant='body2' color='text.secondary' sx={{ textAlign: 'center', py: 2 }}>\r\n No media in this package yet\r\n </Typography>\r\n )\r\n }\r\n\r\n return (\r\n <List>\r\n {medias.map((media) => (\r\n <ListItem key={media.MediaId} sx={{ gap: 1, alignItems: 'center' }} className={mediaWidgetClasses.itemChild}>\r\n <ImageWithFallback\r\n src={media?.PictureUrl}\r\n title={media?.PictureUrl}\r\n fallbackSrc='images/default-video.webp'\r\n alt='product-picture'\r\n style={{\r\n width: '50px',\r\n height: '50px',\r\n borderRadius: 3,\r\n objectFit: 'cover',\r\n flex: '0 0 auto'\r\n }}\r\n />\r\n <Typography\r\n noWrap\r\n variant='subtitle1'\r\n fontWeight={500}\r\n sx={{ flexGrow: 1 }}\r\n title={media.ProductName}\r\n {...(itemTitlePropsGetter ? itemTitlePropsGetter(media) : itemTitleProps ?? {})}\r\n onClick={onClose}\r\n className={mediaWidgetClasses.itemChildTitle}\r\n >\r\n {media.ProductName}\r\n </Typography>\r\n <DeleteButton onDelete={() => onDelete(media.ProductId)} size='small' />\r\n </ListItem>\r\n ))}\r\n </List>\r\n )\r\n}\r\n"],"names":["MediaList","_ref","medias","onDelete","_ref2","useItemTitleProps","itemTitleProps","itemTitlePropsGetter","onClose","length","_jsx","Typography","variant","color","sx","textAlign","py","children","List","map","media","_jsxs","ListItem","gap","alignItems","className","mediaWidgetClasses","itemChild","ImageWithFallback","src","PictureUrl","title","fallbackSrc","alt","style","width","height","borderRadius","objectFit","flex","_objectSpread","noWrap","fontWeight","flexGrow","ProductName","onClick","itemChildTitle","DeleteButton","ProductId","size","MediaId"],"mappings":"yaAaaA,EAAiC,SAAxBC,GAAiD,IAAtBC,EAAMD,EAANC,OAAQC,EAAQF,EAARE,SACvDC,EAA0DC,KAAuB,CAAE,EAA3EC,EAAcF,EAAdE,eAAgBC,EAAoBH,EAApBG,qBAAsBC,EAAOJ,EAAPI,QAE9C,OAAsB,IAAlBN,EAAOO,OAEPC,EAACC,EAAW,CAAAC,QAAQ,QAAQC,MAAM,iBAAiBC,GAAI,CAAEC,UAAW,SAAUC,GAAI,GAErEC,SAAA,iCAKfP,EAACQ,EACE,CAAAD,SAAAf,EAAOiB,IAAI,SAACC,GAAK,OAChBC,EAACC,EAAQ,CAAqBR,GAAI,CAAES,IAAK,EAAGC,WAAY,UAAYC,UAAWC,EAAmBC,UAASV,SAAA,CACzGP,EAACkB,EACC,CAAAC,IAAKT,aAAAA,EAAAA,EAAOU,WACZC,MAAOX,aAAAA,EAAAA,EAAOU,WACdE,YAAY,4BACZC,IAAI,kBACJC,MAAO,CACLC,MAAO,OACPC,OAAQ,OACRC,aAAc,EACdC,UAAW,QACXC,KAAM,cAGV7B,EAACC,EAAU6B,EAAAA,EAAA,CACTC,QAAM,EACN7B,QAAQ,YACR8B,WAAY,IACZ5B,GAAI,CAAE6B,SAAU,GAChBZ,MAAOX,EAAMwB,aACRrC,EAAuBA,EAAqBa,GAASd,QAAAA,EAAkB,CAAE,GAAA,CAAA,EAAA,CAC9EuC,QAASrC,EACTiB,UAAWC,EAAmBoB,eAAc7B,SAE3CG,EAAMwB,eAETlC,EAACqC,EAAa,CAAA5C,SAAU,WAAF,OAAQA,EAASiB,EAAM4B,UAAU,EAAEC,KAAK,YA1BjD7B,EAAM8B,QA4BtB,IAGP"}
1
+ {"version":3,"file":"media-list.js","sources":["../../../src/media-right/media-widget/media-list.tsx"],"sourcesContent":["import { ImageWithFallback } from 'dinocollab-core/components'\r\nimport { useItemTitleProps } from './item-title-props-context'\r\nimport { List, ListItem, Typography } from '@mui/material'\r\nimport type { FC } from 'react'\r\nimport type { IMediaRightItem } from '../types'\r\nimport { DeleteButton } from './button.delete'\r\nimport { mediaWidgetClasses } from './styled'\r\n\r\nexport interface IMediaListProps {\r\n medias: IMediaRightItem[]\r\n onDelete: (mediaId: string) => void\r\n}\r\n\r\nexport const MediaList: FC<IMediaListProps> = ({ medias, onDelete }) => {\r\n const { itemTitleProps, itemTitlePropsGetter, onClose } = useItemTitleProps() || {}\r\n\r\n if (medias.length === 0) {\r\n return (\r\n <Typography variant='body2' color='text.secondary' sx={{ textAlign: 'center', py: 2 }}>\r\n No media in this playlist yet\r\n </Typography>\r\n )\r\n }\r\n\r\n return (\r\n <List>\r\n {medias.map((media) => (\r\n <ListItem key={media.MediaId} sx={{ gap: 1, alignItems: 'center' }} className={mediaWidgetClasses.itemChild}>\r\n <ImageWithFallback\r\n src={media?.PictureUrl}\r\n title={media?.PictureUrl}\r\n fallbackSrc='images/default-video.webp'\r\n alt='product-picture'\r\n style={{\r\n width: '50px',\r\n height: '50px',\r\n borderRadius: 3,\r\n objectFit: 'cover',\r\n flex: '0 0 auto'\r\n }}\r\n />\r\n <Typography\r\n noWrap\r\n variant='subtitle1'\r\n fontWeight={500}\r\n sx={{ flexGrow: 1 }}\r\n title={media.ProductName}\r\n {...(itemTitlePropsGetter ? itemTitlePropsGetter(media) : itemTitleProps ?? {})}\r\n onClick={onClose}\r\n className={mediaWidgetClasses.itemChildTitle}\r\n >\r\n {media.ProductName}\r\n </Typography>\r\n <DeleteButton onDelete={() => onDelete(media.ProductId)} size='small' />\r\n </ListItem>\r\n ))}\r\n </List>\r\n )\r\n}\r\n"],"names":["MediaList","_ref","medias","onDelete","_ref2","useItemTitleProps","itemTitleProps","itemTitlePropsGetter","onClose","length","_jsx","Typography","variant","color","sx","textAlign","py","children","List","map","media","_jsxs","ListItem","gap","alignItems","className","mediaWidgetClasses","itemChild","ImageWithFallback","src","PictureUrl","title","fallbackSrc","alt","style","width","height","borderRadius","objectFit","flex","_objectSpread","noWrap","fontWeight","flexGrow","ProductName","onClick","itemChildTitle","DeleteButton","ProductId","size","MediaId"],"mappings":"yaAaaA,EAAiC,SAAxBC,GAAiD,IAAtBC,EAAMD,EAANC,OAAQC,EAAQF,EAARE,SACvDC,EAA0DC,KAAuB,CAAE,EAA3EC,EAAcF,EAAdE,eAAgBC,EAAoBH,EAApBG,qBAAsBC,EAAOJ,EAAPI,QAE9C,OAAsB,IAAlBN,EAAOO,OAEPC,EAACC,EAAW,CAAAC,QAAQ,QAAQC,MAAM,iBAAiBC,GAAI,CAAEC,UAAW,SAAUC,GAAI,GAErEC,SAAA,kCAKfP,EAACQ,EACE,CAAAD,SAAAf,EAAOiB,IAAI,SAACC,GAAK,OAChBC,EAACC,EAAQ,CAAqBR,GAAI,CAAES,IAAK,EAAGC,WAAY,UAAYC,UAAWC,EAAmBC,UAASV,SAAA,CACzGP,EAACkB,EACC,CAAAC,IAAKT,aAAAA,EAAAA,EAAOU,WACZC,MAAOX,aAAAA,EAAAA,EAAOU,WACdE,YAAY,4BACZC,IAAI,kBACJC,MAAO,CACLC,MAAO,OACPC,OAAQ,OACRC,aAAc,EACdC,UAAW,QACXC,KAAM,cAGV7B,EAACC,EAAU6B,EAAAA,EAAA,CACTC,QAAM,EACN7B,QAAQ,YACR8B,WAAY,IACZ5B,GAAI,CAAE6B,SAAU,GAChBZ,MAAOX,EAAMwB,aACRrC,EAAuBA,EAAqBa,GAASd,QAAAA,EAAkB,CAAE,GAAA,CAAA,EAAA,CAC9EuC,QAASrC,EACTiB,UAAWC,EAAmBoB,eAAc7B,SAE3CG,EAAMwB,eAETlC,EAACqC,EAAa,CAAA5C,SAAU,WAAF,OAAQA,EAASiB,EAAM4B,UAAU,EAAEC,KAAK,YA1BjD7B,EAAM8B,QA4BtB,IAGP"}
@@ -1,2 +1,2 @@
1
- import{slicedToArray as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import{useState as t}from"react";import{InlineEditing as o}from"./inline-editing.js";import{mediaRightStoreOptions as e}from"../configs.js";import{NewCollectionButton as n}from"../unit.control.js";import{Box as m}from"@mui/material";var a=function(a){var l=a.onSaveGroup,p=t(!1),c=r(p,2),s=c[0],u=c[1];return i(m,{sx:{p:1,pt:0,width:"100%"},children:i(o,{isEdit:s,onSubmit:function(r){r.trim()&&(l(r.trim()),u(!1))},setShowEdit:u,textField:{label:"Package name",placeholder:"Enter package name",inputProps:{maxLength:e.MAX_NAME_GROUP},sx:{width:"100%"}},children:i(n,{onClick:function(){u(!0)}})})})};export{a as NewGroupArea};
1
+ import{slicedToArray as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r}from"react/jsx-runtime";import{useState as t}from"react";import{InlineEditing as o}from"./inline-editing.js";import{mediaRightStoreOptions as e}from"../configs.js";import{NewCollectionButton as n}from"../unit.control.js";import{Box as m}from"@mui/material";var l=function(l){var a=l.onSaveGroup,p=t(!1),s=i(p,2),u=s[0],c=s[1];return r(m,{sx:{p:1,pt:0,width:"100%"},children:r(o,{isEdit:u,onSubmit:function(i){i.trim()&&(a(i.trim()),c(!1))},setShowEdit:c,textField:{label:"Playlist name",placeholder:"Enter playlist name",inputProps:{maxLength:e.MAX_NAME_GROUP},sx:{width:"100%"}},children:r(n,{onClick:function(){c(!0)}})})})};export{l as NewGroupArea};
2
2
  //# sourceMappingURL=new-group-area.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"new-group-area.js","sources":["../../../src/media-right/media-widget/new-group-area.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport { InlineEditing } from './inline-editing'\r\nimport { mediaRightStoreOptions } from '../configs'\r\nimport { NewCollectionButton } from '../unit.control'\r\nimport { Box } from '@mui/material'\r\n\r\ninterface INewGroupAreaProps {\r\n onSaveGroup: (groupName: string) => void\r\n}\r\n\r\nexport const NewGroupArea: React.FC<INewGroupAreaProps> = ({ onSaveGroup }) => {\r\n const [showNewGroupInput, setShowNewGroupInput] = useState(false)\r\n\r\n const handleNewGroupClick = () => {\r\n setShowNewGroupInput(true)\r\n }\r\n\r\n const handleSaveNewGroup = (value: string) => {\r\n if (value.trim()) {\r\n onSaveGroup(value.trim())\r\n setShowNewGroupInput(false)\r\n }\r\n }\r\n\r\n return (\r\n <Box sx={{ p: 1, pt: 0, width: '100%' }}>\r\n <InlineEditing\r\n isEdit={showNewGroupInput}\r\n onSubmit={handleSaveNewGroup}\r\n setShowEdit={setShowNewGroupInput}\r\n textField={{\r\n label: 'Package name',\r\n placeholder: 'Enter package name',\r\n inputProps: { maxLength: mediaRightStoreOptions.MAX_NAME_GROUP },\r\n sx: { width: '100%' }\r\n }}\r\n >\r\n <NewCollectionButton onClick={handleNewGroupClick} />\r\n </InlineEditing>\r\n </Box>\r\n )\r\n}\r\n"],"names":["NewGroupArea","_ref","onSaveGroup","_useState","useState","_useState2","_slicedToArray","showNewGroupInput","setShowNewGroupInput","_jsx","Box","sx","p","pt","width","children","InlineEditing","isEdit","onSubmit","value","trim","setShowEdit","textField","label","placeholder","inputProps","maxLength","mediaRightStoreOptions","MAX_NAME_GROUP","NewCollectionButton","onClick"],"mappings":"iWAUaA,EAA6C,SAAjCC,GAAqD,IAAjBC,EAAWD,EAAXC,YAC3DC,EAAkDC,GAAS,GAAMC,EAAAC,EAAAH,EAAA,GAA1DI,EAAiBF,EAAA,GAAEG,EAAoBH,EAAA,GAa9C,OACEI,EAACC,EAAI,CAAAC,GAAI,CAAEC,EAAG,EAAGC,GAAI,EAAGC,MAAO,QAAQC,SACrCN,EAACO,EAAa,CACZC,OAAQV,EACRW,SAXqB,SAACC,GACtBA,EAAMC,SACRlB,EAAYiB,EAAMC,QAClBZ,GAAqB,GAExB,EAOKa,YAAab,EACbc,UAAW,CACTC,MAAO,eACPC,YAAa,qBACbC,WAAY,CAAEC,UAAWC,EAAuBC,gBAChDjB,GAAI,CAAEG,MAAO,SAGfC,SAAAN,EAACoB,EAAmB,CAACC,QAxBC,WAC1BtB,GAAqB,EACtB,OA0BH"}
1
+ {"version":3,"file":"new-group-area.js","sources":["../../../src/media-right/media-widget/new-group-area.tsx"],"sourcesContent":["import React, { useState } from 'react'\r\nimport { InlineEditing } from './inline-editing'\r\nimport { mediaRightStoreOptions } from '../configs'\r\nimport { NewCollectionButton } from '../unit.control'\r\nimport { Box } from '@mui/material'\r\n\r\ninterface INewGroupAreaProps {\r\n onSaveGroup: (groupName: string) => void\r\n}\r\n\r\nexport const NewGroupArea: React.FC<INewGroupAreaProps> = ({ onSaveGroup }) => {\r\n const [showNewGroupInput, setShowNewGroupInput] = useState(false)\r\n\r\n const handleNewGroupClick = () => {\r\n setShowNewGroupInput(true)\r\n }\r\n\r\n const handleSaveNewGroup = (value: string) => {\r\n if (value.trim()) {\r\n onSaveGroup(value.trim())\r\n setShowNewGroupInput(false)\r\n }\r\n }\r\n\r\n return (\r\n <Box sx={{ p: 1, pt: 0, width: '100%' }}>\r\n <InlineEditing\r\n isEdit={showNewGroupInput}\r\n onSubmit={handleSaveNewGroup}\r\n setShowEdit={setShowNewGroupInput}\r\n textField={{\r\n label: 'Playlist name',\r\n placeholder: 'Enter playlist name',\r\n inputProps: { maxLength: mediaRightStoreOptions.MAX_NAME_GROUP },\r\n sx: { width: '100%' }\r\n }}\r\n >\r\n <NewCollectionButton onClick={handleNewGroupClick} />\r\n </InlineEditing>\r\n </Box>\r\n )\r\n}\r\n"],"names":["NewGroupArea","_ref","onSaveGroup","_useState","useState","_useState2","_slicedToArray","showNewGroupInput","setShowNewGroupInput","_jsx","Box","sx","p","pt","width","children","InlineEditing","isEdit","onSubmit","value","trim","setShowEdit","textField","label","placeholder","inputProps","maxLength","mediaRightStoreOptions","MAX_NAME_GROUP","NewCollectionButton","onClick"],"mappings":"iWAUaA,EAA6C,SAAjCC,GAAqD,IAAjBC,EAAWD,EAAXC,YAC3DC,EAAkDC,GAAS,GAAMC,EAAAC,EAAAH,EAAA,GAA1DI,EAAiBF,EAAA,GAAEG,EAAoBH,EAAA,GAa9C,OACEI,EAACC,EAAI,CAAAC,GAAI,CAAEC,EAAG,EAAGC,GAAI,EAAGC,MAAO,QAAQC,SACrCN,EAACO,EAAa,CACZC,OAAQV,EACRW,SAXqB,SAACC,GACtBA,EAAMC,SACRlB,EAAYiB,EAAMC,QAClBZ,GAAqB,GAExB,EAOKa,YAAab,EACbc,UAAW,CACTC,MAAO,gBACPC,YAAa,sBACbC,WAAY,CAAEC,UAAWC,EAAuBC,gBAChDjB,GAAI,CAAEG,MAAO,SAGfC,SAAAN,EAACoB,EAAmB,CAACC,QAxBC,WAC1BtB,GAAqB,EACtB,OA0BH"}
@@ -1,2 +1,2 @@
1
- import{jsx as r,jsxs as o}from"react/jsx-runtime";import{Card as e,CardContent as t,Typography as i}from"@mui/material";import a from"@mui/icons-material/Folder";var n=function(){return r(e,{sx:{boxShadow:0},children:o(t,{sx:{textAlign:"center",py:4},children:[r(a,{sx:{fontSize:64,color:"text.secondary",mb:2}}),r(i,{variant:"h6",color:"text.secondary",children:"No Media Rights Packages yet."}),r(i,{variant:"body2",color:"text.secondary",children:"Try adding some products."})]})})};export{n as EmptyState};
1
+ import{jsx as r,jsxs as o}from"react/jsx-runtime";import{Card as t,CardContent as e,Typography as i}from"@mui/material";import n from"@mui/icons-material/Folder";var a=function(){return r(t,{sx:{boxShadow:0},children:o(e,{sx:{textAlign:"center",py:4},children:[r(n,{sx:{fontSize:64,color:"text.secondary",mb:2}}),r(i,{variant:"h6",color:"text.secondary",children:"No playlist yet."}),r(i,{variant:"body2",color:"text.secondary",children:"Try adding some playlist."})]})})};export{a as EmptyState};
2
2
  //# sourceMappingURL=units.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"units.js","sources":["../../../src/media-right/media-widget/units.tsx"],"sourcesContent":["import { Card, CardContent, Typography } from '@mui/material'\r\nimport type { FC } from 'react'\r\nimport FolderIcon from '@mui/icons-material/Folder'\r\n\r\nexport const EmptyState: FC = () => (\r\n <Card sx={{ boxShadow: 0 }}>\r\n <CardContent sx={{ textAlign: 'center', py: 4 }}>\r\n <FolderIcon sx={{ fontSize: 64, color: 'text.secondary', mb: 2 }} />\r\n <Typography variant='h6' color='text.secondary'>\r\n No Media Rights Packages yet.\r\n </Typography>\r\n <Typography variant='body2' color='text.secondary'>\r\n Try adding some products.\r\n </Typography>\r\n </CardContent>\r\n </Card>\r\n)\r\n"],"names":["EmptyState","_jsx","Card","sx","boxShadow","children","_jsxs","CardContent","textAlign","py","FolderIcon","fontSize","color","mb","Typography","variant"],"mappings":"kKAIaA,IAAAA,EAAiB,WAAP,OACrBC,EAACC,GAAKC,GAAI,CAAEC,UAAW,GAAGC,SACxBC,EAACC,GAAYJ,GAAI,CAAEK,UAAW,SAAUC,GAAI,GAAGJ,SAAA,CAC7CJ,EAACS,EAAU,CAACP,GAAI,CAAEQ,SAAU,GAAIC,MAAO,iBAAkBC,GAAI,KAC7DZ,EAACa,EAAW,CAAAC,QAAQ,KAAKH,MAAM,iBAElBP,SAAA,kCACbJ,EAACa,GAAWC,QAAQ,QAAQH,MAAM,4DAI/B"}
1
+ {"version":3,"file":"units.js","sources":["../../../src/media-right/media-widget/units.tsx"],"sourcesContent":["import { Card, CardContent, Typography } from '@mui/material'\r\nimport type { FC } from 'react'\r\nimport FolderIcon from '@mui/icons-material/Folder'\r\n\r\nexport const EmptyState: FC = () => (\r\n <Card sx={{ boxShadow: 0 }}>\r\n <CardContent sx={{ textAlign: 'center', py: 4 }}>\r\n <FolderIcon sx={{ fontSize: 64, color: 'text.secondary', mb: 2 }} />\r\n <Typography variant='h6' color='text.secondary'>\r\n No playlist yet.\r\n </Typography>\r\n <Typography variant='body2' color='text.secondary'>\r\n Try adding some playlist.\r\n </Typography>\r\n </CardContent>\r\n </Card>\r\n)\r\n"],"names":["EmptyState","_jsx","Card","sx","boxShadow","children","_jsxs","CardContent","textAlign","py","FolderIcon","fontSize","color","mb","Typography","variant"],"mappings":"kKAIaA,IAAAA,EAAiB,WAAP,OACrBC,EAACC,GAAKC,GAAI,CAAEC,UAAW,GAAGC,SACxBC,EAACC,GAAYJ,GAAI,CAAEK,UAAW,SAAUC,GAAI,GAAGJ,SAAA,CAC7CJ,EAACS,EAAU,CAACP,GAAI,CAAEQ,SAAU,GAAIC,MAAO,iBAAkBC,GAAI,KAC7DZ,EAACa,EAAW,CAAAC,QAAQ,KAAKH,MAAM,iBAElBP,SAAA,qBACbJ,EAACa,GAAWC,QAAQ,QAAQH,MAAM,4DAI/B"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as o,createClass as e,objectSpread2 as r,toConsumableArray as a,classCallCheck as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{createObjectSingleton as n}from"dinocollab-core/utils";import{mediaRightStoreOptions as i}from"./configs.js";import{MediaRightEventStore as l}from"./event-store.js";var s=e(function e(){t(this,e),o(this,"localStorageKey","__media_right_default__"),o(this,"store",new l),o(this,"maxItemsPerGroup",i.MAX_ITEMS_PER_GROUP),o(this,"maxGroup",i.MAX_GROUP),o(this,"maxNameGroup",i.MAX_NAME_GROUP),o(this,"maxChannels",i.MAX_CHANNELS)}),u=function(){function i(){t(this,i)}return e(i,[{key:"initialize",value:function(){i.provider.store.emit("requestState",{})}},{key:"subscribe",value:function(o,e){return i.provider.store.subscribe(o,e)}},{key:"getGroups",value:function(){var o,e=this.loadFromLocalStorage();return Object.values(null!==(o=e.groups)&&void 0!==o?o:{})}},{key:"getGroupsMap",value:function(){var o;return null!==(o=this.loadFromLocalStorage().groups)&&void 0!==o?o:{}}},{key:"getGroup",value:function(o){var e;return null===(e=this.loadFromLocalStorage().groups)||void 0===e?void 0:e[o]}},{key:"addGroup",value:function(e){var a=this.loadFromLocalStorage(),t=Object.keys(a.groups).length,n=i.provider.maxGroup;if(t>=n)throw new Error("Maximum groups limit reached (".concat(n,")"));var l=i.provider.maxNameGroup;if(e.name&&e.name.length>l)throw new Error("Group name exceeds maximum length (".concat(l,")"));var s=r(r({},e),{},{createdAt:Date.now(),items:[],channels:[]}),u=r(r({},a.groups),{},o({},e.id,s));this.saveToLocalStorage(u)}},{key:"updateGroup",value:function(e,a){var t=this.loadFromLocalStorage();if(t.groups[e]){var n=i.provider.maxNameGroup;if(a.name&&a.name.length>n)throw new Error("Group name exceeds maximum length (".concat(n,")"));var l=r(r({},t.groups),{},o({},e,r(r({},t.groups[e]),a)));this.saveToLocalStorage(l)}}},{key:"removeGroup",value:function(o){var e=this.loadFromLocalStorage(),a=r({},e.groups);delete a[o],this.saveToLocalStorage(a)}},{key:"addChannel",value:function(e,t){var n=this.loadFromLocalStorage(),l=n.groups[e];if(!l)throw new Error("Group ".concat(e," not found"));var s=i.provider.maxChannels;if(l.channels.length>=s)throw new Error("Group ".concat(e," has reached maximum channels limit (").concat(s,")"));var u=r(r({},l),{},{channels:[].concat(a(l.channels),[t])}),c=r(r({},n.groups),{},o({},e,u));this.saveToLocalStorage(c)}},{key:"updateChannel",value:function(e,t,n){var i=this.loadFromLocalStorage(),l=i.groups[e];if(l&&l.channels[t]){var s=a(l.channels);s[t]=r(r({},s[t]),n);var u=r(r({},i.groups),{},o({},e,r(r({},l),{},{channels:s})));this.saveToLocalStorage(u)}}},{key:"removeChannel",value:function(e,t){var n=this.loadFromLocalStorage(),i=n.groups[e];if(i){var l=a(i.channels);l.splice(t,1);var s=r(r({},n.groups),{},o({},e,r(r({},i),{},{channels:l})));this.saveToLocalStorage(s)}}},{key:"clearChannels",value:function(e){var a=this.loadFromLocalStorage(),t=a.groups[e];if(t){var n=r(r({},a.groups),{},o({},e,r(r({},t),{},{channels:[]})));this.saveToLocalStorage(n)}}},{key:"addItem",value:function(e){var t=this.loadFromLocalStorage(),n=t.groups[e.GroupId];if(!n)throw new Error("Group ".concat(e.GroupId," not found"));var l,s=n.items.findIndex(function(o){return o.ProductId===e.ProductId}),u=i.provider.maxItemsPerGroup;if(-1===s&&n.items.length>=u)throw new Error("Group ".concat(e.GroupId," has reached maximum items limit (").concat(u,")"));s>=0?(l=a(n.items))[s]=e:l=[].concat(a(n.items),[e]);var c=r(r({},t.groups),{},o({},e.GroupId,r(r({},n),{},{items:l})));this.saveToLocalStorage(c)}},{key:"updateItem",value:function(e,t,n){var i=this.loadFromLocalStorage(),l=i.groups[e];if(l){var s=l.items.findIndex(function(o){return o.ProductId===t});if(s>=0){var u=a(l.items);u[s]=r(r({},u[s]),n);var c=r(r({},i.groups),{},o({},e,r(r({},l),{},{items:u})));this.saveToLocalStorage(c)}}}},{key:"removeItem",value:function(e,a){var t=this.loadFromLocalStorage(),n=t.groups[e];if(n){var i=n.items.filter(function(o){return o.ProductId!==a}),l=r(r({},t.groups),{},o({},e,r(r({},n),{},{items:i})));this.saveToLocalStorage(l)}}},{key:"clearAll",value:function(){this.saveToLocalStorage({})}},{key:"loadFromLocalStorage",value:function(){var o={version:"1.0",groups:{}};try{if("undefined"!=typeof globalThis&&globalThis.localStorage){var e=localStorage.getItem(i.provider.localStorageKey),r=e?JSON.parse(e):null;null!=r&&r.groups&&Object.keys(r.groups).length>0&&(o=r)}}catch(o){console.error("Error loading media rights from localStorage:",o)}return o}},{key:"saveToLocalStorage",value:function(o){if("undefined"!=typeof globalThis&&globalThis.localStorage)if(i.provider.localStorageKey){var e={version:"1.0",groups:o};localStorage.setItem(i.provider.localStorageKey,JSON.stringify(e)),i.provider.store.emit("stateChange",{groups:o})}else console.warn("No localStorageKey provided, skipping storage")}}],[{key:"provider",get:function(){var o;return null!==(o=n(i.key_provider).get())&&void 0!==o?o:new s}},{key:"setProvider",value:function(o){n(i.key_provider).set(null!=o?o:new s)}},{key:"setOptions",value:function(o){var e=i.provider;void 0!==o.localStorageKey&&(e.localStorageKey=o.localStorageKey),void 0!==o.maxItemsPerGroup&&(e.maxItemsPerGroup=o.maxItemsPerGroup),void 0!==o.maxGroup&&(e.maxGroup=o.maxGroup),void 0!==o.maxNameGroup&&(e.maxNameGroup=o.maxNameGroup),void 0!==o.maxChannels&&(e.maxChannels=o.maxChannels),i.setProvider(e)}}])}();o(u,"key_provider","__media_right_key_provider__");var c=new u;export{u as MediaRightService,c as mediaRightService};
1
+ import{defineProperty as e,createClass as o,objectSpread2 as r,toConsumableArray as a,classCallCheck as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{createObjectSingleton as l}from"dinocollab-core/utils";import{mediaRightStoreOptions as i}from"./configs.js";import{MediaRightEventStore as n}from"./event-store.js";var s=o(function o(){t(this,o),e(this,"localStorageKey","__media_right_default__"),e(this,"store",new n),e(this,"maxItemsPerGroup",i.MAX_ITEMS_PER_GROUP),e(this,"maxGroup",i.MAX_GROUP),e(this,"maxNameGroup",i.MAX_NAME_GROUP),e(this,"maxChannels",i.MAX_CHANNELS)}),u=function(){function i(){t(this,i)}return o(i,[{key:"initialize",value:function(){i.provider.store.emit("requestState",{})}},{key:"subscribe",value:function(e,o){return i.provider.store.subscribe(e,o)}},{key:"getGroups",value:function(){var e,o=this.loadFromLocalStorage();return Object.values(null!==(e=o.groups)&&void 0!==e?e:{})}},{key:"getGroupsMap",value:function(){var e;return null!==(e=this.loadFromLocalStorage().groups)&&void 0!==e?e:{}}},{key:"getGroup",value:function(e){var o;return null===(o=this.loadFromLocalStorage().groups)||void 0===o?void 0:o[e]}},{key:"addGroup",value:function(o){var a=this.loadFromLocalStorage(),t=Object.keys(a.groups).length,l=i.provider.maxGroup;if(t>=l)throw new Error("Maximum playlist limit reached (".concat(l,")"));var n=i.provider.maxNameGroup;if(o.name&&o.name.length>n)throw new Error("Playlist name exceeds maximum length (".concat(n,")"));var s=r(r({},o),{},{createdAt:Date.now(),items:[],channels:[]}),u=r(r({},a.groups),{},e({},o.id,s));this.saveToLocalStorage(u)}},{key:"updateGroup",value:function(o,a){var t=this.loadFromLocalStorage();if(t.groups[o]){var l=i.provider.maxNameGroup;if(a.name&&a.name.length>l)throw new Error("Playlist name exceeds maximum length (".concat(l,")"));var n=r(r({},t.groups),{},e({},o,r(r({},t.groups[o]),a)));this.saveToLocalStorage(n)}}},{key:"removeGroup",value:function(e){var o=this.loadFromLocalStorage(),a=r({},o.groups);delete a[e],this.saveToLocalStorage(a)}},{key:"addChannel",value:function(o,t){var l=this.loadFromLocalStorage(),n=l.groups[o];if(!n)throw new Error("Playlist ".concat(o," not found"));var s=i.provider.maxChannels;if(n.channels.length>=s)throw new Error("Playlist ".concat(o," has reached maximum channels limit (").concat(s,")"));var u=r(r({},n),{},{channels:[].concat(a(n.channels),[t])}),c=r(r({},l.groups),{},e({},o,u));this.saveToLocalStorage(c)}},{key:"updateChannel",value:function(o,t,l){var i=this.loadFromLocalStorage(),n=i.groups[o];if(n&&n.channels[t]){var s=a(n.channels);s[t]=r(r({},s[t]),l);var u=r(r({},i.groups),{},e({},o,r(r({},n),{},{channels:s})));this.saveToLocalStorage(u)}}},{key:"removeChannel",value:function(o,t){var l=this.loadFromLocalStorage(),i=l.groups[o];if(i){var n=a(i.channels);n.splice(t,1);var s=r(r({},l.groups),{},e({},o,r(r({},i),{},{channels:n})));this.saveToLocalStorage(s)}}},{key:"clearChannels",value:function(o){var a=this.loadFromLocalStorage(),t=a.groups[o];if(t){var l=r(r({},a.groups),{},e({},o,r(r({},t),{},{channels:[]})));this.saveToLocalStorage(l)}}},{key:"addItem",value:function(o){var t=this.loadFromLocalStorage(),l=t.groups[o.GroupId];if(!l)throw new Error("Playlist ".concat(o.GroupId," not found"));var n,s=l.items.findIndex(function(e){return e.ProductId===o.ProductId}),u=i.provider.maxItemsPerGroup;if(-1===s&&l.items.length>=u)throw new Error("Playlist ".concat(o.GroupId," has reached maximum items limit (").concat(u,")"));s>=0?(n=a(l.items))[s]=o:n=[].concat(a(l.items),[o]);var c=r(r({},t.groups),{},e({},o.GroupId,r(r({},l),{},{items:n})));this.saveToLocalStorage(c)}},{key:"updateItem",value:function(o,t,l){var i=this.loadFromLocalStorage(),n=i.groups[o];if(n){var s=n.items.findIndex(function(e){return e.ProductId===t});if(s>=0){var u=a(n.items);u[s]=r(r({},u[s]),l);var c=r(r({},i.groups),{},e({},o,r(r({},n),{},{items:u})));this.saveToLocalStorage(c)}}}},{key:"removeItem",value:function(o,a){var t=this.loadFromLocalStorage(),l=t.groups[o];if(l){var i=l.items.filter(function(e){return e.ProductId!==a}),n=r(r({},t.groups),{},e({},o,r(r({},l),{},{items:i})));this.saveToLocalStorage(n)}}},{key:"clearAll",value:function(){this.saveToLocalStorage({})}},{key:"loadFromLocalStorage",value:function(){var e={version:"1.0",groups:{}};try{if("undefined"!=typeof globalThis&&globalThis.localStorage){var o=localStorage.getItem(i.provider.localStorageKey),r=o?JSON.parse(o):null;null!=r&&r.groups&&Object.keys(r.groups).length>0&&(e=r)}}catch(e){console.error("Error loading playlist from localStorage:",e)}return e}},{key:"saveToLocalStorage",value:function(e){if("undefined"!=typeof globalThis&&globalThis.localStorage)if(i.provider.localStorageKey){var o={version:"1.0",groups:e};localStorage.setItem(i.provider.localStorageKey,JSON.stringify(o)),i.provider.store.emit("stateChange",{groups:e})}else console.warn("No localStorageKey provided, skipping storage")}}],[{key:"provider",get:function(){var e;return null!==(e=l(i.key_provider).get())&&void 0!==e?e:new s}},{key:"setProvider",value:function(e){l(i.key_provider).set(null!=e?e:new s)}},{key:"setOptions",value:function(e){var o=i.provider;void 0!==e.localStorageKey&&(o.localStorageKey=e.localStorageKey),void 0!==e.maxItemsPerGroup&&(o.maxItemsPerGroup=e.maxItemsPerGroup),void 0!==e.maxGroup&&(o.maxGroup=e.maxGroup),void 0!==e.maxNameGroup&&(o.maxNameGroup=e.maxNameGroup),void 0!==e.maxChannels&&(o.maxChannels=e.maxChannels),i.setProvider(o)}}])}();e(u,"key_provider","__media_right_key_provider__");var c=new u;export{u as MediaRightService,c as mediaRightService};
2
2
  //# sourceMappingURL=service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sources":["../../src/media-right/service.ts"],"sourcesContent":["import { createObjectSingleton } from 'dinocollab-core/utils'\r\nimport { mediaRightStoreOptions } from './configs'\r\nimport { MediaRightEventStore } from './event-store'\r\nimport { IMediaRightGroup, IMediaRightItem, IMediaRightChannel, IMediaRightOptions } from './types'\r\n\r\nexport interface IMediaRightMetadata<O = any> {\r\n version: string\r\n groups: Record<string, IMediaRightGroup<O>>\r\n}\r\n\r\nexport interface IMediaRightProvider extends IMediaRightOptions {\r\n localStorageKey: string\r\n store: MediaRightEventStore\r\n}\r\n\r\nclass MediaRightProviderDefault implements IMediaRightProvider {\r\n localStorageKey = '__media_right_default__'\r\n store = new MediaRightEventStore()\r\n maxItemsPerGroup = mediaRightStoreOptions.MAX_ITEMS_PER_GROUP\r\n maxGroup = mediaRightStoreOptions.MAX_GROUP\r\n maxNameGroup = mediaRightStoreOptions.MAX_NAME_GROUP\r\n maxChannels = mediaRightStoreOptions.MAX_CHANNELS\r\n}\r\n\r\nexport class MediaRightService<O = any> {\r\n static key_provider = '__media_right_key_provider__'\r\n\r\n static get provider(): IMediaRightProvider {\r\n const ObjectProvider = createObjectSingleton<IMediaRightProvider>(MediaRightService.key_provider)\r\n return ObjectProvider.get() ?? new MediaRightProviderDefault()\r\n }\r\n\r\n static setProvider(provider: IMediaRightProvider) {\r\n const ObjectProvider = createObjectSingleton<IMediaRightProvider>(MediaRightService.key_provider)\r\n ObjectProvider.set(provider ?? new MediaRightProviderDefault())\r\n }\r\n\r\n static setOptions(options: IMediaRightOptions) {\r\n const provider = MediaRightService.provider\r\n if (options.localStorageKey !== undefined) provider.localStorageKey = options.localStorageKey\r\n if (options.maxItemsPerGroup !== undefined) provider.maxItemsPerGroup = options.maxItemsPerGroup\r\n if (options.maxGroup !== undefined) provider.maxGroup = options.maxGroup\r\n if (options.maxNameGroup !== undefined) provider.maxNameGroup = options.maxNameGroup\r\n if (options.maxChannels !== undefined) provider.maxChannels = options.maxChannels\r\n MediaRightService.setProvider(provider)\r\n }\r\n\r\n initialize() {\r\n MediaRightService.provider.store.emit('requestState', {})\r\n }\r\n\r\n subscribe(event: string, callback: (...args: any[]) => void) {\r\n return MediaRightService.provider.store.subscribe(event as any, callback as any)\r\n }\r\n\r\n // Group operations\r\n getGroups(): IMediaRightGroup<O>[] {\r\n const storedData = this.loadFromLocalStorage()\r\n return Object.values(storedData.groups ?? {})\r\n }\r\n\r\n getGroupsMap(): Record<string, IMediaRightGroup<O>> {\r\n const storedData = this.loadFromLocalStorage()\r\n return storedData.groups ?? {}\r\n }\r\n\r\n getGroup(groupId: string): IMediaRightGroup<O> | undefined {\r\n const storedData = this.loadFromLocalStorage()\r\n return storedData.groups?.[groupId]\r\n }\r\n\r\n addGroup(group: Omit<IMediaRightGroup<O>, 'createdAt' | 'items' | 'channels'>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n\r\n // Validate max groups limit\r\n const currentGroupCount = Object.keys(storedData.groups).length\r\n const maxGroup = MediaRightService.provider.maxGroup!\r\n if (currentGroupCount >= maxGroup) {\r\n throw new Error(`Maximum groups limit reached (${maxGroup})`)\r\n }\r\n\r\n // Validate group name length\r\n const maxNameGroup = MediaRightService.provider.maxNameGroup!\r\n if (group.name && group.name.length > maxNameGroup) {\r\n throw new Error(`Group name exceeds maximum length (${maxNameGroup})`)\r\n }\r\n\r\n const newGroup: IMediaRightGroup<O> = { ...group, createdAt: Date.now(), items: [], channels: [] }\r\n const updatedGroups = { ...storedData.groups, [group.id]: newGroup }\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateGroup(groupId: string, updates: Partial<Pick<IMediaRightGroup<O>, 'name'>>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n if (storedData.groups[groupId]) {\r\n // Validate group name length if updating name\r\n const maxNameGroup = MediaRightService.provider.maxNameGroup!\r\n if (updates.name && updates.name.length > maxNameGroup) {\r\n throw new Error(`Group name exceeds maximum length (${maxNameGroup})`)\r\n }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...storedData.groups[groupId], ...updates } }\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n }\r\n\r\n removeGroup(groupId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const updatedGroups = { ...storedData.groups }\r\n delete updatedGroups[groupId]\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n // Channel operations\r\n addChannel(groupId: string, channel: IMediaRightChannel): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n // Validate group existence\r\n if (!group) throw new Error(`Group ${groupId} not found`)\r\n\r\n // Validate max channels limit\r\n const maxChannels = MediaRightService.provider.maxChannels!\r\n if (group.channels.length >= maxChannels) {\r\n throw new Error(`Group ${groupId} has reached maximum channels limit (${maxChannels})`)\r\n }\r\n\r\n const updatedGroup = { ...group, channels: [...group.channels, channel] }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: updatedGroup }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateChannel(groupId: string, channelIndex: number, updates: Partial<IMediaRightChannel>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group || !group.channels[channelIndex]) return\r\n\r\n const updatedChannels = [...group.channels]\r\n updatedChannels[channelIndex] = { ...updatedChannels[channelIndex], ...updates }\r\n\r\n const updatedGroups = {\r\n ...storedData.groups,\r\n [groupId]: { ...group, channels: updatedChannels }\r\n }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n removeChannel(groupId: string, channelIndex: number): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const updatedChannels = [...group.channels]\r\n updatedChannels.splice(channelIndex, 1)\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, channels: updatedChannels } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n clearChannels(groupId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, channels: [] } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n // Item operations\r\n addItem(item: IMediaRightItem<O>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[item.GroupId]\r\n\r\n if (!group) {\r\n throw new Error(`Group ${item.GroupId} not found`)\r\n }\r\n\r\n // Validate max items limit (only for new items, not updates)\r\n const existingItemIndex = group.items.findIndex((i) => i.ProductId === item.ProductId)\r\n const maxItemsPerGroup = MediaRightService.provider.maxItemsPerGroup!\r\n if (existingItemIndex === -1 && group.items.length >= maxItemsPerGroup) {\r\n throw new Error(`Group ${item.GroupId} has reached maximum items limit (${maxItemsPerGroup})`)\r\n }\r\n\r\n let updatedItems: IMediaRightItem<O>[]\r\n\r\n if (existingItemIndex >= 0) {\r\n updatedItems = [...group.items]\r\n updatedItems[existingItemIndex] = item\r\n } else {\r\n updatedItems = [...group.items, item]\r\n }\r\n\r\n const updatedGroups = { ...storedData.groups, [item.GroupId]: { ...group, items: updatedItems } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateItem(groupId: string, productId: string, updates: Partial<IMediaRightItem<O>>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const itemIndex = group.items.findIndex((i) => i.ProductId === productId)\r\n if (itemIndex >= 0) {\r\n const updatedItems = [...group.items]\r\n updatedItems[itemIndex] = { ...updatedItems[itemIndex], ...updates }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, items: updatedItems } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n }\r\n\r\n removeItem(groupId: string, productId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const updatedItems = group.items.filter((i) => i.ProductId !== productId)\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, items: updatedItems } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n clearAll(): void {\r\n this.saveToLocalStorage({})\r\n }\r\n\r\n private loadFromLocalStorage(): IMediaRightMetadata<O> {\r\n const defaultValue: IMediaRightMetadata<O> = { version: '1.0', groups: {} }\r\n let data = defaultValue\r\n\r\n try {\r\n if (typeof globalThis !== 'undefined' && globalThis.localStorage) {\r\n const temp = localStorage.getItem(MediaRightService.provider.localStorageKey)\r\n const tempParsed = temp ? JSON.parse(temp) : null\r\n if (tempParsed?.groups && Object.keys(tempParsed.groups).length > 0) {\r\n data = tempParsed\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error loading media rights from localStorage:', error)\r\n }\r\n\r\n return data\r\n }\r\n\r\n private saveToLocalStorage(groups: Record<string, IMediaRightGroup<O>>) {\r\n if (typeof globalThis !== 'undefined' && globalThis.localStorage) {\r\n if (MediaRightService.provider.localStorageKey) {\r\n const value: IMediaRightMetadata<O> = { version: '1.0', groups }\r\n localStorage.setItem(MediaRightService.provider.localStorageKey, JSON.stringify(value))\r\n MediaRightService.provider.store.emit('stateChange', { groups })\r\n } else {\r\n console.warn('No localStorageKey provided, skipping storage')\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const mediaRightService = new MediaRightService()\r\n"],"names":["MediaRightProviderDefault","_createClass","_classCallCheck","_defineProperty","this","MediaRightEventStore","mediaRightStoreOptions","MAX_ITEMS_PER_GROUP","MAX_GROUP","MAX_NAME_GROUP","MAX_CHANNELS","MediaRightService","key","value","provider","store","emit","event","callback","subscribe","_storedData$groups","storedData","loadFromLocalStorage","Object","values","groups","_storedData$groups2","groupId","_storedData$groups3","group","currentGroupCount","keys","length","maxGroup","Error","concat","maxNameGroup","name","newGroup","_objectSpread","createdAt","Date","now","items","channels","updatedGroups","id","saveToLocalStorage","updates","channel","maxChannels","updatedGroup","_toConsumableArray","channelIndex","updatedChannels","splice","item","GroupId","updatedItems","existingItemIndex","findIndex","i","ProductId","maxItemsPerGroup","productId","itemIndex","filter","data","version","globalThis","localStorage","temp","getItem","localStorageKey","tempParsed","JSON","parse","error","console","setItem","stringify","warn","get","_ObjectProvider$get","createObjectSingleton","key_provider","set","options","undefined","setProvider","mediaRightService"],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sources":["../../src/media-right/service.ts"],"sourcesContent":["import { createObjectSingleton } from 'dinocollab-core/utils'\r\nimport { mediaRightStoreOptions } from './configs'\r\nimport { MediaRightEventStore } from './event-store'\r\nimport { IMediaRightGroup, IMediaRightItem, IMediaRightChannel, IMediaRightOptions } from './types'\r\n\r\nexport interface IMediaRightMetadata<O = any> {\r\n version: string\r\n groups: Record<string, IMediaRightGroup<O>>\r\n}\r\n\r\nexport interface IMediaRightProvider extends IMediaRightOptions {\r\n localStorageKey: string\r\n store: MediaRightEventStore\r\n}\r\n\r\nclass MediaRightProviderDefault implements IMediaRightProvider {\r\n localStorageKey = '__media_right_default__'\r\n store = new MediaRightEventStore()\r\n maxItemsPerGroup = mediaRightStoreOptions.MAX_ITEMS_PER_GROUP\r\n maxGroup = mediaRightStoreOptions.MAX_GROUP\r\n maxNameGroup = mediaRightStoreOptions.MAX_NAME_GROUP\r\n maxChannels = mediaRightStoreOptions.MAX_CHANNELS\r\n}\r\n\r\nexport class MediaRightService<O = any> {\r\n static key_provider = '__media_right_key_provider__'\r\n\r\n static get provider(): IMediaRightProvider {\r\n const ObjectProvider = createObjectSingleton<IMediaRightProvider>(MediaRightService.key_provider)\r\n return ObjectProvider.get() ?? new MediaRightProviderDefault()\r\n }\r\n\r\n static setProvider(provider: IMediaRightProvider) {\r\n const ObjectProvider = createObjectSingleton<IMediaRightProvider>(MediaRightService.key_provider)\r\n ObjectProvider.set(provider ?? new MediaRightProviderDefault())\r\n }\r\n\r\n static setOptions(options: IMediaRightOptions) {\r\n const provider = MediaRightService.provider\r\n if (options.localStorageKey !== undefined) provider.localStorageKey = options.localStorageKey\r\n if (options.maxItemsPerGroup !== undefined) provider.maxItemsPerGroup = options.maxItemsPerGroup\r\n if (options.maxGroup !== undefined) provider.maxGroup = options.maxGroup\r\n if (options.maxNameGroup !== undefined) provider.maxNameGroup = options.maxNameGroup\r\n if (options.maxChannels !== undefined) provider.maxChannels = options.maxChannels\r\n MediaRightService.setProvider(provider)\r\n }\r\n\r\n initialize() {\r\n MediaRightService.provider.store.emit('requestState', {})\r\n }\r\n\r\n subscribe(event: string, callback: (...args: any[]) => void) {\r\n return MediaRightService.provider.store.subscribe(event as any, callback as any)\r\n }\r\n\r\n // Group operations\r\n getGroups(): IMediaRightGroup<O>[] {\r\n const storedData = this.loadFromLocalStorage()\r\n return Object.values(storedData.groups ?? {})\r\n }\r\n\r\n getGroupsMap(): Record<string, IMediaRightGroup<O>> {\r\n const storedData = this.loadFromLocalStorage()\r\n return storedData.groups ?? {}\r\n }\r\n\r\n getGroup(groupId: string): IMediaRightGroup<O> | undefined {\r\n const storedData = this.loadFromLocalStorage()\r\n return storedData.groups?.[groupId]\r\n }\r\n\r\n addGroup(group: Omit<IMediaRightGroup<O>, 'createdAt' | 'items' | 'channels'>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n\r\n // Validate max groups limit\r\n const currentGroupCount = Object.keys(storedData.groups).length\r\n const maxGroup = MediaRightService.provider.maxGroup!\r\n if (currentGroupCount >= maxGroup) {\r\n throw new Error(`Maximum playlist limit reached (${maxGroup})`)\r\n }\r\n\r\n // Validate group name length\r\n const maxNameGroup = MediaRightService.provider.maxNameGroup!\r\n if (group.name && group.name.length > maxNameGroup) {\r\n throw new Error(`Playlist name exceeds maximum length (${maxNameGroup})`)\r\n }\r\n\r\n const newGroup: IMediaRightGroup<O> = { ...group, createdAt: Date.now(), items: [], channels: [] }\r\n const updatedGroups = { ...storedData.groups, [group.id]: newGroup }\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateGroup(groupId: string, updates: Partial<Pick<IMediaRightGroup<O>, 'name'>>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n if (storedData.groups[groupId]) {\r\n // Validate group name length if updating name\r\n const maxNameGroup = MediaRightService.provider.maxNameGroup!\r\n if (updates.name && updates.name.length > maxNameGroup) {\r\n throw new Error(`Playlist name exceeds maximum length (${maxNameGroup})`)\r\n }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...storedData.groups[groupId], ...updates } }\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n }\r\n\r\n removeGroup(groupId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const updatedGroups = { ...storedData.groups }\r\n delete updatedGroups[groupId]\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n // Channel operations\r\n addChannel(groupId: string, channel: IMediaRightChannel): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n // Validate group existence\r\n if (!group) throw new Error(`Playlist ${groupId} not found`)\r\n\r\n // Validate max channels limit\r\n const maxChannels = MediaRightService.provider.maxChannels!\r\n if (group.channels.length >= maxChannels) {\r\n throw new Error(`Playlist ${groupId} has reached maximum channels limit (${maxChannels})`)\r\n }\r\n\r\n const updatedGroup = { ...group, channels: [...group.channels, channel] }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: updatedGroup }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateChannel(groupId: string, channelIndex: number, updates: Partial<IMediaRightChannel>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group || !group.channels[channelIndex]) return\r\n\r\n const updatedChannels = [...group.channels]\r\n updatedChannels[channelIndex] = { ...updatedChannels[channelIndex], ...updates }\r\n\r\n const updatedGroups = {\r\n ...storedData.groups,\r\n [groupId]: { ...group, channels: updatedChannels }\r\n }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n removeChannel(groupId: string, channelIndex: number): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const updatedChannels = [...group.channels]\r\n updatedChannels.splice(channelIndex, 1)\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, channels: updatedChannels } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n clearChannels(groupId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, channels: [] } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n // Item operations\r\n addItem(item: IMediaRightItem<O>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[item.GroupId]\r\n\r\n if (!group) {\r\n throw new Error(`Playlist ${item.GroupId} not found`)\r\n }\r\n\r\n // Validate max items limit (only for new items, not updates)\r\n const existingItemIndex = group.items.findIndex((i) => i.ProductId === item.ProductId)\r\n const maxItemsPerGroup = MediaRightService.provider.maxItemsPerGroup!\r\n if (existingItemIndex === -1 && group.items.length >= maxItemsPerGroup) {\r\n throw new Error(`Playlist ${item.GroupId} has reached maximum items limit (${maxItemsPerGroup})`)\r\n }\r\n\r\n let updatedItems: IMediaRightItem<O>[]\r\n\r\n if (existingItemIndex >= 0) {\r\n updatedItems = [...group.items]\r\n updatedItems[existingItemIndex] = item\r\n } else {\r\n updatedItems = [...group.items, item]\r\n }\r\n\r\n const updatedGroups = { ...storedData.groups, [item.GroupId]: { ...group, items: updatedItems } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateItem(groupId: string, productId: string, updates: Partial<IMediaRightItem<O>>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const itemIndex = group.items.findIndex((i) => i.ProductId === productId)\r\n if (itemIndex >= 0) {\r\n const updatedItems = [...group.items]\r\n updatedItems[itemIndex] = { ...updatedItems[itemIndex], ...updates }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, items: updatedItems } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n }\r\n\r\n removeItem(groupId: string, productId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) return\r\n\r\n const updatedItems = group.items.filter((i) => i.ProductId !== productId)\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: { ...group, items: updatedItems } }\r\n\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n clearAll(): void {\r\n this.saveToLocalStorage({})\r\n }\r\n\r\n private loadFromLocalStorage(): IMediaRightMetadata<O> {\r\n const defaultValue: IMediaRightMetadata<O> = { version: '1.0', groups: {} }\r\n let data = defaultValue\r\n\r\n try {\r\n if (typeof globalThis !== 'undefined' && globalThis.localStorage) {\r\n const temp = localStorage.getItem(MediaRightService.provider.localStorageKey)\r\n const tempParsed = temp ? JSON.parse(temp) : null\r\n if (tempParsed?.groups && Object.keys(tempParsed.groups).length > 0) {\r\n data = tempParsed\r\n }\r\n }\r\n } catch (error) {\r\n console.error('Error loading playlist from localStorage:', error)\r\n }\r\n\r\n return data\r\n }\r\n\r\n private saveToLocalStorage(groups: Record<string, IMediaRightGroup<O>>) {\r\n if (typeof globalThis !== 'undefined' && globalThis.localStorage) {\r\n if (MediaRightService.provider.localStorageKey) {\r\n const value: IMediaRightMetadata<O> = { version: '1.0', groups }\r\n localStorage.setItem(MediaRightService.provider.localStorageKey, JSON.stringify(value))\r\n MediaRightService.provider.store.emit('stateChange', { groups })\r\n } else {\r\n console.warn('No localStorageKey provided, skipping storage')\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const mediaRightService = new MediaRightService()\r\n"],"names":["MediaRightProviderDefault","_createClass","_classCallCheck","_defineProperty","this","MediaRightEventStore","mediaRightStoreOptions","MAX_ITEMS_PER_GROUP","MAX_GROUP","MAX_NAME_GROUP","MAX_CHANNELS","MediaRightService","key","value","provider","store","emit","event","callback","subscribe","_storedData$groups","storedData","loadFromLocalStorage","Object","values","groups","_storedData$groups2","groupId","_storedData$groups3","group","currentGroupCount","keys","length","maxGroup","Error","concat","maxNameGroup","name","newGroup","_objectSpread","createdAt","Date","now","items","channels","updatedGroups","id","saveToLocalStorage","updates","channel","maxChannels","updatedGroup","_toConsumableArray","channelIndex","updatedChannels","splice","item","GroupId","updatedItems","existingItemIndex","findIndex","i","ProductId","maxItemsPerGroup","productId","itemIndex","filter","data","version","globalThis","localStorage","temp","getItem","localStorageKey","tempParsed","JSON","parse","error","console","setItem","stringify","warn","get","_ObjectProvider$get","createObjectSingleton","key_provider","set","options","undefined","setProvider","mediaRightService"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as a}from"react/jsx-runtime";import{Button as r,TextField as e}from"@mui/material";import t from"@mui/icons-material/Add";import{mediaRightStoreOptions as n}from"./configs.js";var o=function(e){var n=e.onClick;return a(r,{fullWidth:!0,size:"small",variant:"outlined",startIcon:a(t,{}),onClick:n,sx:{justifyContent:"flex-start",textTransform:"none",color:"primary.main",borderStyle:"dashed"},children:"New Package"})},i=function(r){var t=r.value,o=r.onChange;return a(e,{fullWidth:!0,size:"small",label:"Package name",value:t,onChange:function(a){return o(a.target.value)},placeholder:"Enter package name",autoFocus:!0,variant:"outlined",inputProps:{maxLength:n.MAX_NAME_GROUP}})};export{o as NewCollectionButton,i as NewCollectionInput};
1
+ import{jsx as t}from"react/jsx-runtime";import{Button as r,TextField as a}from"@mui/material";import n from"@mui/icons-material/Add";import{mediaRightStoreOptions as e}from"./configs.js";var i=function(a){var e=a.onClick;return t(r,{fullWidth:!0,size:"small",variant:"outlined",startIcon:t(n,{}),onClick:e,sx:{justifyContent:"flex-start",textTransform:"none",color:"primary.main",borderStyle:"dashed"},children:"New Playlist"})},l=function(r){var n=r.value,i=r.onChange;return t(a,{fullWidth:!0,size:"small",label:"Playlist name",value:n,onChange:function(t){return i(t.target.value)},placeholder:"Enter playlist name",autoFocus:!0,variant:"outlined",inputProps:{maxLength:e.MAX_NAME_GROUP}})};export{i as NewCollectionButton,l as NewCollectionInput};
2
2
  //# sourceMappingURL=unit.control.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"unit.control.js","sources":["../../src/media-right/unit.control.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport { Button, TextField } from '@mui/material'\r\nimport AddIcon from '@mui/icons-material/Add'\r\nimport { mediaRightStoreOptions } from './configs'\r\n\r\nexport interface NewCollectionButtonProps {\r\n onClick: () => void\r\n}\r\n\r\nexport const NewCollectionButton: FC<NewCollectionButtonProps> = ({ onClick }) => (\r\n <Button\r\n fullWidth\r\n size='small'\r\n variant='outlined'\r\n startIcon={<AddIcon />}\r\n onClick={onClick}\r\n sx={{\r\n justifyContent: 'flex-start',\r\n textTransform: 'none',\r\n color: 'primary.main',\r\n borderStyle: 'dashed'\r\n }}\r\n >\r\n New Package\r\n </Button>\r\n)\r\n\r\nexport interface NewCollectionInputProps {\r\n value: string\r\n onChange: (value: string) => void\r\n}\r\n\r\nexport const NewCollectionInput: FC<NewCollectionInputProps> = ({ value, onChange }) => (\r\n <TextField\r\n fullWidth\r\n size='small'\r\n label='Package name'\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder='Enter package name'\r\n autoFocus\r\n variant='outlined'\r\n inputProps={{ maxLength: mediaRightStoreOptions.MAX_NAME_GROUP }}\r\n />\r\n)\r\n"],"names":["NewCollectionButton","_ref","onClick","_jsx","Button","fullWidth","size","variant","startIcon","AddIcon","sx","justifyContent","textTransform","color","borderStyle","children","NewCollectionInput","_ref2","value","onChange","TextField","label","e","target","placeholder","autoFocus","inputProps","maxLength","mediaRightStoreOptions","MAX_NAME_GROUP"],"mappings":"+LASaA,EAAoD,SAAjCC,GAAA,IAAoCC,EAAOD,EAAPC,QAAO,OACzEC,EAACC,EAAM,CACLC,WACA,EAAAC,KAAK,QACLC,QAAQ,WACRC,UAAWL,EAACM,EAAO,IACnBP,QAASA,EACTQ,GAAI,CACFC,eAAgB,aAChBC,cAAe,OACfC,MAAO,eACPC,YAAa,UACdC,SAAA,eAGM,EAQEC,EAAkD,SAAhCC,GAAA,IAAmCC,EAAKD,EAALC,MAAOC,EAAQF,EAARE,SAAQ,OAC/EhB,EAACiB,EACC,CAAAf,WACA,EAAAC,KAAK,QACLe,MAAM,eACNH,MAAOA,EACPC,SAAU,SAACG,GAAC,OAAKH,EAASG,EAAEC,OAAOL,MAAM,EACzCM,YAAY,qBACZC,WACA,EAAAlB,QAAQ,WACRmB,WAAY,CAAEC,UAAWC,EAAuBC,iBAChD"}
1
+ {"version":3,"file":"unit.control.js","sources":["../../src/media-right/unit.control.tsx"],"sourcesContent":["import type { FC } from 'react'\r\nimport { Button, TextField } from '@mui/material'\r\nimport AddIcon from '@mui/icons-material/Add'\r\nimport { mediaRightStoreOptions } from './configs'\r\n\r\nexport interface NewCollectionButtonProps {\r\n onClick: () => void\r\n}\r\n\r\nexport const NewCollectionButton: FC<NewCollectionButtonProps> = ({ onClick }) => (\r\n <Button\r\n fullWidth\r\n size='small'\r\n variant='outlined'\r\n startIcon={<AddIcon />}\r\n onClick={onClick}\r\n sx={{\r\n justifyContent: 'flex-start',\r\n textTransform: 'none',\r\n color: 'primary.main',\r\n borderStyle: 'dashed'\r\n }}\r\n >\r\n New Playlist\r\n </Button>\r\n)\r\n\r\nexport interface NewCollectionInputProps {\r\n value: string\r\n onChange: (value: string) => void\r\n}\r\n\r\nexport const NewCollectionInput: FC<NewCollectionInputProps> = ({ value, onChange }) => (\r\n <TextField\r\n fullWidth\r\n size='small'\r\n label='Playlist name'\r\n value={value}\r\n onChange={(e) => onChange(e.target.value)}\r\n placeholder='Enter playlist name'\r\n autoFocus\r\n variant='outlined'\r\n inputProps={{ maxLength: mediaRightStoreOptions.MAX_NAME_GROUP }}\r\n />\r\n)\r\n"],"names":["NewCollectionButton","_ref","onClick","_jsx","Button","fullWidth","size","variant","startIcon","AddIcon","sx","justifyContent","textTransform","color","borderStyle","children","NewCollectionInput","_ref2","value","onChange","TextField","label","e","target","placeholder","autoFocus","inputProps","maxLength","mediaRightStoreOptions","MAX_NAME_GROUP"],"mappings":"+LASaA,EAAoD,SAAjCC,GAAA,IAAoCC,EAAOD,EAAPC,QAAO,OACzEC,EAACC,EAAM,CACLC,WACA,EAAAC,KAAK,QACLC,QAAQ,WACRC,UAAWL,EAACM,EAAO,IACnBP,QAASA,EACTQ,GAAI,CACFC,eAAgB,aAChBC,cAAe,OACfC,MAAO,eACPC,YAAa,UACdC,SAAA,gBAGM,EAQEC,EAAkD,SAAhCC,GAAA,IAAmCC,EAAKD,EAALC,MAAOC,EAAQF,EAARE,SAAQ,OAC/EhB,EAACiB,EACC,CAAAf,WACA,EAAAC,KAAK,QACLe,MAAM,gBACNH,MAAOA,EACPC,SAAU,SAACG,GAAC,OAAKH,EAASG,EAAEC,OAAOL,MAAM,EACzCM,YAAY,sBACZC,WACA,EAAAlB,QAAQ,WACRmB,WAAY,CAAEC,UAAWC,EAAuBC,iBAChD"}
@@ -1,2 +1,2 @@
1
- import{createClass as t,typeof as e,classCallCheck as n,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as o}from"react/jsx-runtime";import i from"./notify-detail.custom.js";import s from"./notify-detail.default.js";import{ETypeContent as a}from"./types.js";var l=function(){return t(function t(e){n(this,t),r(this,"firtVersion","htmlContent"),r(this,"defaultVersion","1.0.0"),this.rawContent=e,this.parsedObj=this.parseContent()},[{key:"parseContent",value:function(){var t,n,r,o,i,s=void 0;if(!this.rawContent||""===this.rawContent.trim())return{type:a.Template,version:this.defaultVersion,html:""};try{if(!(i=JSON.parse(this.rawContent))||"object"!==e(i)||!i.version)throw new Error("No version found");s=i.version}catch(t){if("string"==typeof this.rawContent&&/<[^>]+>/.test(this.rawContent))return{type:a.Template,version:this.firtVersion,html:this.rawContent};i=this.rawContent}return"1.0.0"===s?{type:null===(t=i)||void 0===t?void 0:t.type,version:s,html:null===(n=i)||void 0===n?void 0:n.html}:{type:null===(r=i)||void 0===r?void 0:r.type,version:s,html:null===(o=i)||void 0===o?void 0:o.html}}},{key:"getContentByVersion",value:function(){return this.parseContent()}},{key:"renderComponent",value:function(t,e,n){var r=this.parseContent();switch(r.type){case a.Custom:return o(i,{data:t,onRead:e,onClose:n,html:r.html||""});case a.Template:default:return o(s,{data:t,onRead:e,onClose:n,html:r.html||""})}}}])}();export{l as NotifyContentConverter};
1
+ import{createClass as t,typeof as e,classCallCheck as n,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s}from"react/jsx-runtime";import o from"./notify-detail.custom.js";import i from"./notify-detail.default.js";import{ETypeContent as a}from"./types.js";var l=function(){return t(function t(e){n(this,t),r(this,"firtVersion","htmlContent"),r(this,"defaultVersion","1.0.0"),this.rawContent=e,this.parsedObj=this.parseContent()},[{key:"parseContent",value:function(){var t,n=void 0;if(!this.rawContent||""===this.rawContent.trim())return{type:a.Template,version:this.defaultVersion,html:""};try{if((t=JSON.parse(this.rawContent))&&"object"===e(t))return n=t.version||this.defaultVersion,{type:t.type||a.Template,version:n,html:t.html||""}}catch(t){if("string"==typeof this.rawContent&&/<[^>]+>/.test(this.rawContent))return{type:a.Template,version:this.firtVersion,html:this.rawContent}}return{type:a.Template,version:this.defaultVersion,html:this.rawContent}}},{key:"getContentByVersion",value:function(){return this.parseContent()}},{key:"renderComponent",value:function(t,e,n){var r=this.parseContent();switch(r.type){case a.Custom:return s(o,{data:t,onRead:e,onClose:n,html:r.html||""});case a.Template:default:return s(i,{data:t,onRead:e,onClose:n,html:r.html||""})}}}])}();export{l as NotifyContentConverter};
2
2
  //# sourceMappingURL=class.config.js.map