dinocollab-shared 1.2.45 → 1.2.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/action-license/area.group.js +1 -1
- package/dist/action-license/area.group.js.map +1 -1
- package/dist/action-license/btn.icon.add-to-package.js +1 -1
- package/dist/action-license/btn.icon.add-to-package.js.map +1 -1
- package/dist/action-license/quickly-add-to-cart/content.js +1 -1
- package/dist/action-license/quickly-add-to-cart/content.js.map +1 -1
- package/dist/cart/hooks.js +1 -1
- package/dist/cart/hooks.js.map +1 -1
- package/dist/cart/service.js +1 -1
- package/dist/cart/service.js.map +1 -1
- package/dist/cart/styled.js +1 -1
- package/dist/cart/styled.js.map +1 -1
- package/dist/cart/widget.js +1 -1
- package/dist/cart/widget.js.map +1 -1
- package/dist/factory/cart-content/create.cart-content.js +1 -1
- package/dist/factory/cart-content/styled.js +1 -1
- package/dist/factory/cart-content/styled.js.map +1 -1
- package/dist/factory/cart-item/create.cart-item.js +1 -1
- package/dist/factory/cart-item/create.cart-item.js.map +1 -1
- package/dist/factory/cart-item/styled.js +1 -1
- package/dist/factory/cart-item/styled.js.map +1 -1
- package/dist/media-player/core/btn.volume.js +1 -1
- package/dist/media-player/core/btn.volume.js.map +1 -1
- package/dist/media-player/core/progressBar.js +1 -1
- package/dist/media-player/core/progressBar.js.map +1 -1
- package/dist/media-player/core/videoplayer.js +1 -1
- package/dist/media-player/core/videoplayer.js.map +1 -1
- package/dist/media-player/muted.js +1 -1
- package/dist/media-player/muted.js.map +1 -1
- package/dist/media-player/player.video-stream.js.map +1 -1
- package/dist/media-right/configs.js +1 -1
- package/dist/media-right/configs.js.map +1 -1
- package/dist/media-right/group-selector/index.js +1 -1
- package/dist/media-right/group-selector/index.js.map +1 -1
- package/dist/media-right/group-selector/modal-header.js +1 -1
- package/dist/media-right/group-selector/modal-header.js.map +1 -1
- package/dist/media-right/group-selector/units.js +1 -1
- package/dist/media-right/group-selector/units.js.map +1 -1
- package/dist/media-right/guide-steps/index.js +1 -1
- package/dist/media-right/guide-steps/index.js.map +1 -1
- package/dist/media-right/helpers.js +1 -1
- package/dist/media-right/helpers.js.map +1 -1
- package/dist/media-right/hooks.js +1 -1
- package/dist/media-right/hooks.js.map +1 -1
- package/dist/media-right/index.js +1 -1
- package/dist/media-right/media-widget/index.js +1 -1
- package/dist/media-right/media-widget/index.js.map +1 -1
- package/dist/media-right/media-widget/media-group-accordion.js +1 -1
- package/dist/media-right/media-widget/media-group-accordion.js.map +1 -1
- package/dist/media-right/media-widget/new-group-area.js +1 -1
- package/dist/media-right/media-widget/new-group-area.js.map +1 -1
- package/dist/media-right/media-widget/styled.js +1 -1
- package/dist/media-right/media-widget/styled.js.map +1 -1
- package/dist/media-right/service.js +1 -1
- package/dist/media-right/service.js.map +1 -1
- package/dist/media-right/types.js.map +1 -1
- package/dist/media-right/unit.control.js +1 -1
- package/dist/media-right/unit.control.js.map +1 -1
- package/dist/notification/content-converter.js +2 -0
- package/dist/notification/content-converter.js.map +1 -0
- package/dist/notification/index.js +1 -1
- package/dist/notification/notify-detail.js +1 -1
- package/dist/notification/notify-detail.js.map +1 -1
- package/dist/types/action-license/btn.icon.add-to-package.d.ts +3 -3
- package/dist/types/action-license/btn.icon.add-to-package.d.ts.map +1 -1
- package/dist/types/action-license/quickly-add-to-cart/content.d.ts +2 -2
- package/dist/types/action-license/quickly-add-to-cart/content.d.ts.map +1 -1
- package/dist/types/cart/hooks.d.ts +5 -0
- package/dist/types/cart/hooks.d.ts.map +1 -1
- package/dist/types/cart/service.d.ts +5 -0
- package/dist/types/cart/service.d.ts.map +1 -1
- package/dist/types/cart/styled.d.ts.map +1 -1
- package/dist/types/factory/cart-content/styled.d.ts.map +1 -1
- package/dist/types/factory/cart-item/create.cart-item.d.ts +1 -1
- package/dist/types/factory/cart-item/create.cart-item.d.ts.map +1 -1
- package/dist/types/factory/cart-item/styled.d.ts.map +1 -1
- package/dist/types/media-player/core/btn.volume.d.ts.map +1 -1
- package/dist/types/media-player/core/progressBar.d.ts +3 -2
- package/dist/types/media-player/core/progressBar.d.ts.map +1 -1
- package/dist/types/media-player/core/videoplayer.d.ts +5 -4
- package/dist/types/media-player/core/videoplayer.d.ts.map +1 -1
- package/dist/types/media-player/muted.d.ts +2 -2
- package/dist/types/media-player/muted.d.ts.map +1 -1
- package/dist/types/media-player/player.video-stream.d.ts +2 -2
- package/dist/types/media-player/player.video-stream.d.ts.map +1 -1
- package/dist/types/media-right/configs.d.ts +1 -1
- package/dist/types/media-right/configs.d.ts.map +1 -1
- package/dist/types/media-right/group-selector/index.d.ts +2 -13
- package/dist/types/media-right/group-selector/index.d.ts.map +1 -1
- package/dist/types/media-right/group-selector/modal-header.d.ts.map +1 -1
- package/dist/types/media-right/group-selector/units.d.ts +3 -0
- package/dist/types/media-right/group-selector/units.d.ts.map +1 -1
- package/dist/types/media-right/guide-steps/index.d.ts.map +1 -1
- package/dist/types/media-right/helpers.d.ts +0 -4
- package/dist/types/media-right/helpers.d.ts.map +1 -1
- package/dist/types/media-right/hooks.d.ts +4 -5
- package/dist/types/media-right/hooks.d.ts.map +1 -1
- package/dist/types/media-right/media-widget/index.d.ts +0 -1
- package/dist/types/media-right/media-widget/index.d.ts.map +1 -1
- package/dist/types/media-right/media-widget/media-group-accordion.d.ts +4 -1
- package/dist/types/media-right/media-widget/media-group-accordion.d.ts.map +1 -1
- package/dist/types/media-right/media-widget/new-group-area.d.ts +2 -0
- package/dist/types/media-right/media-widget/new-group-area.d.ts.map +1 -1
- package/dist/types/media-right/media-widget/styled.d.ts.map +1 -1
- package/dist/types/media-right/service.d.ts +5 -4
- package/dist/types/media-right/service.d.ts.map +1 -1
- package/dist/types/media-right/types.d.ts +5 -5
- package/dist/types/media-right/types.d.ts.map +1 -1
- package/dist/types/media-right/unit.control.d.ts +2 -0
- package/dist/types/media-right/unit.control.d.ts.map +1 -1
- package/dist/types/notification/content-converter.d.ts +14 -0
- package/dist/types/notification/content-converter.d.ts.map +1 -0
- package/dist/types/notification/index.d.ts +1 -0
- package/dist/types/notification/index.d.ts.map +1 -1
- package/dist/types/notification/notify-detail.d.ts +1 -1
- package/dist/types/notification/notify-detail.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/notification/class.config.js +0 -2
- package/dist/notification/class.config.js.map +0 -1
- package/dist/types/media-right/group-selector/NewCollectionInput.d.ts +0 -7
- package/dist/types/media-right/group-selector/NewCollectionInput.d.ts.map +0 -1
- package/dist/types/notification/class.config.d.ts +0 -21
- package/dist/types/notification/class.config.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/media-right/guide-steps/index.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react'\r\nimport { Dialog, DialogContent, DialogActions, Button, IconButton, Box, Typography,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/media-right/guide-steps/index.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from 'react'\r\nimport { Dialog, DialogContent, DialogActions, Button, IconButton, Box, Typography, Stack, Slide, DialogTitle } from '@mui/material'\r\nimport HelpOutlineIcon from '@mui/icons-material/HelpOutline'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport type { FC } from 'react'\r\nimport type { DialogProps, IconButtonProps, StackProps } from '@mui/material'\r\n\r\nexport interface IGuideStep {\r\n label: string\r\n img: string\r\n text?: string\r\n content?: React.ReactNode\r\n}\r\n\r\nexport interface IGuideStepsProps {\r\n title?: string\r\n iconButtonProps?: IconButtonProps\r\n dialogProps?: DialogProps\r\n contentProps?: StackProps\r\n steps: IGuideStep[]\r\n}\r\n\r\nexport const GuideSteps: FC<IGuideStepsProps> = ({ title, iconButtonProps, dialogProps, contentProps, steps }) => {\r\n const [open, setOpen] = useState(false)\r\n const [activeStep, setActiveStep] = useState(0)\r\n const [stepDirection, setStepDirection] = useState<'next' | 'back'>('next')\r\n const contentRef = useRef<HTMLDivElement>(null)\r\n const handleOpen = () => {\r\n setOpen(true)\r\n setActiveStep(0)\r\n setStepDirection('next')\r\n }\r\n const handleClose = () => {\r\n setOpen(false)\r\n }\r\n const handleNext = () => {\r\n setStepDirection('next')\r\n setActiveStep((prev) => prev + 1)\r\n }\r\n const handleBack = () => {\r\n setStepDirection('back')\r\n setActiveStep((prev) => prev - 1)\r\n }\r\n\r\n useEffect(() => {\r\n if (contentRef.current) {\r\n contentRef.current.scrollTop = 0\r\n }\r\n }, [activeStep])\r\n\r\n return (\r\n <>\r\n <IconButton onClick={handleOpen} size='small' {...iconButtonProps}>\r\n <HelpOutlineIcon />\r\n </IconButton>\r\n <Dialog\r\n open={open}\r\n scroll='paper'\r\n onClose={handleClose}\r\n maxWidth='sm'\r\n fullWidth\r\n sx={{ '& .MuiDialog-paper': { width: '80%', height: 700 } }}\r\n {...dialogProps}\r\n >\r\n <DialogTitle\r\n py={2}\r\n sx={{\r\n position: 'relative',\r\n boxShadow: '0 2px 8px -4px rgba(0,0,0,0.25)',\r\n zIndex: 2\r\n }}\r\n >\r\n {title}\r\n <IconButton\r\n aria-label='close'\r\n onClick={handleClose}\r\n sx={{\r\n position: 'absolute',\r\n right: 8,\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n color: (theme) => theme.palette.grey[500],\r\n zIndex: 1\r\n }}\r\n size='small'\r\n >\r\n <CloseIcon />\r\n </IconButton>\r\n </DialogTitle>\r\n <DialogContent ref={contentRef} sx={{ position: 'relative', overflowX: 'hidden' }}>\r\n <Slide\r\n key={`${activeStep}-${stepDirection}`}\r\n in\r\n direction={stepDirection === 'next' ? 'left' : 'right'}\r\n timeout={320}\r\n mountOnEnter\r\n unmountOnExit\r\n >\r\n <Stack alignItems='start' px={2} {...contentProps}>\r\n {steps[activeStep]?.img && (\r\n <img\r\n src={steps[activeStep].img}\r\n alt={steps[activeStep].label}\r\n style={{ maxWidth: '100%', objectFit: 'contain', marginInline: 'auto', marginBottom: 16, borderRadius: 8 }}\r\n />\r\n )}\r\n <Typography variant='h6' fontWeight={600} gutterBottom>\r\n {steps[activeStep]?.label}\r\n </Typography>\r\n {steps[activeStep]?.text?.split('\\n').map((line, lineIdx) => (\r\n <Typography key={lineIdx} variant={lineIdx === 0 ? 'subtitle1' : 'body2'}>\r\n {line}\r\n </Typography>\r\n ))}\r\n {steps[activeStep]?.content && <Box sx={{ mt: 1, width: '100%' }}>{steps[activeStep].content}</Box>}\r\n </Stack>\r\n </Slide>\r\n </DialogContent>\r\n <DialogActions\r\n sx={{\r\n px: 3,\r\n pb: 2,\r\n boxShadow: '0 -2px 8px -4px rgba(0,0,0,0.25)',\r\n zIndex: 2\r\n }}\r\n >\r\n <Box sx={{ mr: 'auto' }} />\r\n {activeStep > 0 && (\r\n <Button onClick={handleBack} size='small'>\r\n Back\r\n </Button>\r\n )}\r\n {activeStep === steps.length - 1 ? (\r\n <Button onClick={handleClose} size='small' variant='contained'>\r\n Finish\r\n </Button>\r\n ) : (\r\n <Button onClick={handleNext} size='small' variant='contained'>\r\n Next\r\n </Button>\r\n )}\r\n </DialogActions>\r\n </Dialog>\r\n </>\r\n )\r\n}\r\n"],"names":["GuideSteps","_ref","_steps$activeStep","_steps$activeStep2","_steps$activeStep3","_steps$activeStep4","title","iconButtonProps","dialogProps","contentProps","steps","_useState","useState","_useState2","_slicedToArray","open","setOpen","_useState3","_useState4","activeStep","setActiveStep","_useState5","_useState6","stepDirection","setStepDirection","contentRef","useRef","handleClose","useEffect","current","scrollTop","_jsxs","_Fragment","children","_jsx","IconButton","_objectSpread","onClick","size","HelpOutlineIcon","Dialog","scroll","onClose","maxWidth","fullWidth","sx","width","height","DialogTitle","py","position","boxShadow","zIndex","right","top","transform","color","theme","palette","grey","CloseIcon","DialogContent","ref","overflowX","Slide","in","direction","timeout","mountOnEnter","unmountOnExit","Stack","alignItems","px","img","src","alt","label","style","objectFit","marginInline","marginBottom","borderRadius","Typography","variant","fontWeight","gutterBottom","text","split","map","line","lineIdx","content","Box","mt","concat","DialogActions","pb","mr","Button","prev","length"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
var t=function(){var t,n;return null!==(n=(null!==(t=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("http").join(" http").match(/[hH][tT][tT][pP][sS]?:\/\/[^\s]+/g))&&void 0!==t?t:[]).filter(function(t){return t}).map(function(t){return t.trim()}))&&void 0!==n?n:[]},n=function(){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",r=new Set(t(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"")),o=n.trim();return r.has(o)},r=function(){return"group_".concat(Date.now(),"_").concat(Math.random().toString(36).substr(2,9))},o=function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;return t.items.length<n};export{n as areDuplicatedLink,o as canAddItemToGroup,t as convertStringToLinks,r as generateGroupId};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../src/media-right/helpers.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../src/media-right/helpers.ts"],"sourcesContent":["import type { IMediaRightGroup } from './types'\r\n\r\n/**\r\n * Convert a string to an array of URLs using improved regex\r\n * @param text Input string\r\n * @returns Array of matched URLs\r\n */\r\nexport const convertStringToLinks = (text: string = ''): string[] => {\r\n const updatedText = text.split('http').join(' http')\r\n const list = updatedText.match(/[hH][tT][tT][pP][sS]?:\\/\\/[^\\s]+/g) ?? []\r\n return list.filter((x) => x).map((x) => x.trim()) ?? []\r\n}\r\n\r\n/**\r\n * Check if a link is duplicated in a string\r\n * @param linkString Input string containing links\r\n * @param value Link to check\r\n * @returns True if the link is duplicated, false otherwise\r\n */\r\nexport const areDuplicatedLink = (linkString: string = '', value: string = '') => {\r\n const linkSet = new Set(convertStringToLinks(linkString))\r\n const formatString = value.trim()\r\n return linkSet.has(formatString)\r\n}\r\n\r\n/**\r\n * Calculate total data from groups\r\n */\r\n// export const getTotalData = (groups: IMediaRightGroup[]): ICartSummary => {\r\n// return groups.reduce(\r\n// (acc, group) => {\r\n// const groupTotal = group.items.reduce((sum, item) => sum + (item.Price * item.Amount), 0)\r\n// return {\r\n// totalGroups: acc.totalGroups + 1,\r\n// totalItems: acc.totalItems + group.items.length,\r\n// totalPrice: acc.totalPrice + groupTotal\r\n// }\r\n// },\r\n// { totalGroups: 0, totalItems: 0, totalPrice: 0 }\r\n// )\r\n// }\r\n\r\n/**\r\n * Get total items and price for a specific group\r\n */\r\n// export const getGroupTotal = (group: IMediaRightGroup) => {\r\n// return group.items.reduce(\r\n// (acc, item) => ({\r\n// totalItems: acc.totalItems + 1,\r\n// totalPrice: acc.totalPrice + (item.Price * item.Amount)\r\n// }),\r\n// { totalItems: 0, totalPrice: 0 }\r\n// )\r\n// }\r\n\r\n/**\r\n * Generate unique group ID\r\n */\r\nexport const generateGroupId = () => {\r\n return `group_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\r\n}\r\n\r\n/**\r\n * Validate group item limit\r\n */\r\nexport const canAddItemToGroup = (group: IMediaRightGroup, maxItems: number = 100): boolean => {\r\n return group.items.length < maxItems\r\n}\r\n"],"names":["convertStringToLinks","_updatedText$match","_list$filter$map","arguments","length","undefined","split","join","match","filter","x","map","trim","areDuplicatedLink","value","linkSet","Set","formatString","has","generateGroupId","concat","Date","now","Math","random","toString","substr","canAddItemToGroup","group","maxItems","items"],"mappings":"IAOaA,EAAuB,WAAgC,IAAAC,EAAAC,EAGlE,OAAiDA,QAAjDA,GADmED,QAAzDA,GAFwCE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAA,IACzBG,MAAM,QAAQC,KAAK,SACnBC,MAAM,4CAAoCP,IAAAA,EAAAA,EAAI,IAC3DQ,OAAO,SAACC,GAAC,OAAKA,CAAC,GAAEC,IAAI,SAACD,GAAC,OAAKA,EAAEE,MAAM,UAACV,IAAAA,EAAAA,EAAI,EACvD,EAQaW,EAAoB,WAAgD,IAAtBC,EAAAX,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAgB,GACnEY,EAAU,IAAIC,IAAIhB,EAD6BG,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAA,KAE/Cc,EAAeH,EAAMF,OAC3B,OAAOG,EAAQG,IAAID,EACrB,EAmCaE,EAAkB,WAC7B,MAAAC,SAAAA,OAAgBC,KAAKC,MAAKF,KAAAA,OAAIG,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,GACrE,EAKaC,EAAoB,SAACC,GAA4D,IAAnCC,EAAA1B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAmB,IAC5E,OAAOyB,EAAME,MAAM1B,OAASyB,CAC9B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as
|
|
1
|
+
import{slicedToArray as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{useRef as n,useState as e,useEffect as t}from"react";import{MediaRightService as u,mediaRightService as o}from"./service.js";function a(a){var i=n(!1);a&&!i.current&&u.setOptions(a);var c=e(function(){return o.getGroupsMap()}),p=r(c,2),l=p[0],s=p[1];return t(function(){i.current||(o.initialize(),i.current=!0);var r=o.subscribe("stateChange",function(r){var n=r.groups;s(n)});return function(){r&&r()}},[]),{groups:Object.values(l),groupsMap:l,options:o.getOptions()}}function i(r){var e=n(!1);r&&!e.current&&(u.setOptions(r),e.current=!0);return{addGroup:function(r){return o.addGroup(r)},updateGroup:function(r,n){return o.updateGroup(r,n)},removeGroup:function(r){return o.removeGroup(r)},addItem:function(r){return o.addItem(r)},updateItem:function(r,n,e){return o.updateItem(r,n,e)},removeItem:function(r,n){return o.removeItem(r,n)},addChannel:function(r,n){return o.addChannel(r,n)},updateChannel:function(r,n,e){return o.updateChannel(r,n,e)},removeChannel:function(r,n){return o.removeChannel(r,n)},clearChannels:function(r){return o.clearChannels(r)},clearCart:function(){return o.clearAll()}}}export{i as useMediaRightActions,a as useMediaRightStore};
|
|
2
2
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../src/media-right/hooks.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\r\nimport { mediaRightService, MediaRightService } from './service'\r\nimport { IMediaRightChannel, IMediaRightChannelCreate, IMediaRightGroup, IMediaRightItem } from './types'\r\n\r\nexport
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../../src/media-right/hooks.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\r\nimport { mediaRightService, MediaRightService } from './service'\r\nimport type { IMediaRightChannel, IMediaRightChannelCreate, IMediaRightGroup, IMediaRightItem, IMediaRightOptions } from './types'\r\n\r\nexport type IMediaRightStoreOptions = IMediaRightOptions\r\n\r\nexport function useMediaRightStore<O = any>(params?: IMediaRightStoreOptions) {\r\n const initializedRef = useRef(false)\r\n\r\n // Set custom localStorage key BEFORE getting initial data\r\n if (params && !initializedRef.current) {\r\n MediaRightService.setOptions(params)\r\n }\r\n\r\n const [groups, setGroups] = useState<Record<string, IMediaRightGroup<O>>>(\r\n () => mediaRightService.getGroupsMap() as Record<string, IMediaRightGroup<O>>\r\n )\r\n\r\n useEffect(() => {\r\n // Initialize and subscribe to changes\r\n if (!initializedRef.current) {\r\n mediaRightService.initialize()\r\n initializedRef.current = true\r\n }\r\n\r\n const unsubscribe = mediaRightService.subscribe('stateChange', ({ groups }) => {\r\n setGroups(groups as Record<string, IMediaRightGroup<O>>)\r\n })\r\n\r\n return () => {\r\n if (unsubscribe) unsubscribe()\r\n }\r\n }, [])\r\n\r\n return { groups: Object.values(groups), groupsMap: groups, options: mediaRightService.getOptions() }\r\n}\r\n\r\nexport function useMediaRightActions<O = any>(params?: IMediaRightStoreOptions) {\r\n const initializedRef = useRef(false)\r\n\r\n // Set custom localStorage key ONCE on mount\r\n if (params && !initializedRef.current) {\r\n MediaRightService.setOptions(params)\r\n initializedRef.current = true\r\n }\r\n\r\n const addGroup = (group: Omit<IMediaRightGroup<O>, 'id' | 'createdAt' | 'items' | 'channels'>) => {\r\n return mediaRightService.addGroup(group)\r\n }\r\n\r\n const updateGroup = (groupId: string, updates: Partial<Pick<IMediaRightGroup<O>, 'name'>>) => {\r\n return mediaRightService.updateGroup(groupId, updates)\r\n }\r\n\r\n const removeGroup = (groupId: string) => {\r\n return mediaRightService.removeGroup(groupId)\r\n }\r\n\r\n const addItem = (item: IMediaRightItem<O>) => {\r\n return mediaRightService.addItem(item)\r\n }\r\n\r\n const updateItem = (groupId: string, productId: string, updates: Partial<IMediaRightItem<O>>) => {\r\n return mediaRightService.updateItem(groupId, productId, updates)\r\n }\r\n\r\n const removeItem = (groupId: string, productId: string) => {\r\n return mediaRightService.removeItem(groupId, productId)\r\n }\r\n\r\n const clearCart = () => {\r\n return mediaRightService.clearAll()\r\n }\r\n\r\n const addChannel = (groupId: string, channel: IMediaRightChannelCreate) => {\r\n return mediaRightService.addChannel(groupId, channel)\r\n }\r\n\r\n const updateChannel = (groupId: string, channelId: string, updates: Partial<IMediaRightChannel>) => {\r\n return mediaRightService.updateChannel(groupId, channelId, updates)\r\n }\r\n\r\n const removeChannel = (groupId: string, channelId: string) => {\r\n return mediaRightService.removeChannel(groupId, channelId)\r\n }\r\n\r\n const clearChannels = (groupId: string) => {\r\n return mediaRightService.clearChannels(groupId)\r\n }\r\n\r\n return {\r\n addGroup,\r\n updateGroup,\r\n removeGroup,\r\n addItem,\r\n updateItem,\r\n removeItem,\r\n addChannel,\r\n updateChannel,\r\n removeChannel,\r\n clearChannels,\r\n clearCart\r\n }\r\n}\r\n"],"names":["useMediaRightStore","params","initializedRef","useRef","current","MediaRightService","setOptions","_useState","useState","mediaRightService","getGroupsMap","_useState2","_slicedToArray","groups","setGroups","useEffect","initialize","unsubscribe","subscribe","_ref","Object","values","groupsMap","options","getOptions","useMediaRightActions","addGroup","group","updateGroup","groupId","updates","removeGroup","addItem","item","updateItem","productId","removeItem","addChannel","channel","updateChannel","channelId","removeChannel","clearChannels","clearCart","clearAll"],"mappings":"6MAMM,SAAUA,EAA4BC,GAC1C,IAAMC,EAAiBC,GAAO,GAG1BF,IAAWC,EAAeE,SAC5BC,EAAkBC,WAAWL,GAG/B,IAAAM,EAA4BC,EAC1B,WAAA,OAAMC,EAAkBC,iBACzBC,EAAAC,EAAAL,EAAA,GAFMM,EAAMF,EAAA,GAAEG,EAASH,EAAA,GAoBxB,OAhBAI,EAAU,WAEHb,EAAeE,UAClBK,EAAkBO,aAClBd,EAAeE,SAAU,GAG3B,IAAMa,EAAcR,EAAkBS,UAAU,cAAe,SAAAC,GAAe,IAAZN,EAAMM,EAANN,OAChEC,EAAUD,EACZ,GAEA,OAAO,WACDI,GAAaA,GAClB,CACF,EAAE,IAEI,CAAEJ,OAAQO,OAAOC,OAAOR,GAASS,UAAWT,EAAQU,QAASd,EAAkBe,aACxF,CAEM,SAAUC,EAA8BxB,GAC5C,IAAMC,EAAiBC,GAAO,GAG1BF,IAAWC,EAAeE,UAC5BC,EAAkBC,WAAWL,GAC7BC,EAAeE,SAAU,GA+C3B,MAAO,CACLsB,SA7Ce,SAACC,GAChB,OAAOlB,EAAkBiB,SAASC,EACnC,EA4CCC,YA1CkB,SAACC,EAAiBC,GACpC,OAAOrB,EAAkBmB,YAAYC,EAASC,EAC/C,EAyCCC,YAvCkB,SAACF,GACnB,OAAOpB,EAAkBsB,YAAYF,EACtC,EAsCCG,QApCc,SAACC,GACf,OAAOxB,EAAkBuB,QAAQC,EAClC,EAmCCC,WAjCiB,SAACL,EAAiBM,EAAmBL,GACtD,OAAOrB,EAAkByB,WAAWL,EAASM,EAAWL,EACzD,EAgCCM,WA9BiB,SAACP,EAAiBM,GACnC,OAAO1B,EAAkB2B,WAAWP,EAASM,EAC9C,EA6BCE,WAvBiB,SAACR,EAAiBS,GACnC,OAAO7B,EAAkB4B,WAAWR,EAASS,EAC9C,EAsBCC,cApBoB,SAACV,EAAiBW,EAAmBV,GACzD,OAAOrB,EAAkB8B,cAAcV,EAASW,EAAWV,EAC5D,EAmBCW,cAjBoB,SAACZ,EAAiBW,GACtC,OAAO/B,EAAkBgC,cAAcZ,EAASW,EACjD,EAgBCE,cAdoB,SAACb,GACrB,OAAOpB,EAAkBiC,cAAcb,EACxC,EAaCc,UA/BgB,WAChB,OAAOlC,EAAkBmC,UAC1B,EA+BH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{
|
|
1
|
+
export{mediaRightDefaultOptions}from"./configs.js";export{EChannelType}from"./types.js";export{GuideSteps}from"./guide-steps/index.js";export{MediaGroupWidget,createMediaGroupWidget}from"./media-widget/index.js";export{ModalAddMediaRight}from"./group-selector/index.js";export{useMediaRightActions,useMediaRightStore}from"./hooks.js";export{MediaRightService,mediaRightService}from"./service.js";export{areDuplicatedLink,canAddItemToGroup,convertStringToLinks,generateGroupId}from"./helpers.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as o,objectSpread2 as
|
|
1
|
+
import{slicedToArray as o,objectSpread2 as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as e,Fragment as n}from"react/jsx-runtime";import{useState as i,useCallback as l}from"react";import{useTheme as a,useMediaQuery as u,Badge as c,Drawer as p}from"@mui/material";import s from"@mui/icons-material/PlaylistPlay";import{Root as m,MenuStyled as d}from"./styled.js";import{IconButtonDark as f}from"../../components/buttons.js";import{MediaGroupAccordion as h}from"./media-group-accordion.js";import{useMediaRightStore as g,useMediaRightActions as P}from"../hooks.js";import{createCartContent as x}from"../../factory/cart-content/create.cart-content.js";import{createCartItem as y}from"../../factory/cart-item/create.cart-item.js";import{NewGroupArea as b}from"./new-group-area.js";var v=x({labels:{title:"Your Playlist",buttonCheckout:"Show in playlist",itemsSuffixMany:"playlists",itemsSuffixSingle:"playlist"},empty:{title:"Your playlist is empty",subTitle:"Try adding some playlist"}}),C=y({}),G=function(t){var x=g(),y=x.groups,G=x.options,j=P(),T=a(),M=u(T.breakpoints.down("sm")),S=i(null),k=o(S,2),w=k[0],D=k[1],L=i(!1),I=o(L,2),N=I[0],B=I[1],E=function(o){j.addGroup({name:o})},z=function(o){j.updateGroup(o.id,o)},A=function(o){j.removeGroup(o)},F=function(o,t){j.removeItem(o,t)},O=l(function(){return r(v,{isMobile:M,carts:y,onClose:function(){return D(null)},onCheckout:function(){return D(null)},buttonMoveToCartProps:t.buttonMoveToCartProps,slots:{headerLeftProps:{flexDirection:"row",alignItems:"flex-end",justifyContent:"space-between",gap:1,flex:1},headerRight:function(){return y.length<G.maxGroup&&r(b,{textFieldProps:{inputProps:{maxLength:G.maxNameGroup}},onSaveGroup:E})},item:function(o){return r(h,{group:o,options:G,onEditGroup:z,onDeleteGroup:A,onDeleteMedia:F,accordionProps:{expanded:N===o.id,onChange:function(t,r){return B(!!r&&o.id)}},inlineEditingProps:{textField:{inputProps:{maxLength:G.maxNameGroup}}},accordionDetailsProps:{sx:{display:"flex",flexDirection:"column",position:"relative",gap:1,p:1,"& .MuiAccordionDetails-root":{p:0}}},renderItem:function(e){return r(C,{item:e,name:e.ProductName,imageUrl:e.PictureUrl,onRemoveCart:function(){return F(o.id,e.ProductId)},itemTitleProps:t.itemTitleProps,itemTitlePropsGetter:t.itemTitlePropsGetter,onClose:function(){return D(null)}},e.ProductId)}},o.id)}}})},[y,M,t,N]);return e(n,{children:[r(f,{onClick:function(o){return D(o.currentTarget)},children:r(c,{badgeContent:y.length||0,color:"error",children:r(s,{})})}),M?r(p,{anchor:"right",open:Boolean(w),onClose:function(){return D(null)},disableScrollLock:!0,PaperProps:{sx:{width:"calc(100% - 100px)",maxWidth:360}},children:r(m,{children:O()})}):r(d,{disableScrollLock:!0,anchorEl:w,open:Boolean(w),onClose:function(){return D(null)},anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{component:"div"},children:r(m,{children:O()})})]})},j=function(o){var e=function(e){return r(G,t(t({},o),e))};return e.displayName="MediaGroupWidget",e};export{G as MediaGroupWidget,j 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 { useCallback, useState } from 'react'\r\nimport { Badge, ButtonProps, Drawer, TypographyProps, useMediaQuery, useTheme } from '@mui/material'\r\nimport PlaylistPlayIcon from '@mui/icons-material/PlaylistPlay'\r\nimport { canAddGroup, generateGroupId } from '../helpers'\r\nimport { MenuStyled, Root } from './styled'\r\nimport { IconButtonDark } from '../../components/buttons'\r\nimport { MediaGroupAccordion } from './media-group-accordion'\r\nimport { useMediaRightStore, useMediaRightActions } from '../hooks'\r\nimport type { IMediaRightGroup, IMediaRightItem } from '../types'\r\nimport createCartContent from '../../factory/cart-content/create.cart-content'\r\nimport createCartItem from '../../factory/cart-item/create.cart-item'\r\nimport { NewGroupArea } from './new-group-area'\r\n\r\nexport interface IMediaGroupWidgetProps {\r\n itemTitleProps?: TypographyProps & { [key: string]: any }\r\n itemTitlePropsGetter?: (item: IMediaRightItem, onClose?: () => void) => TypographyProps & { [key: string]: any }\r\n onClose?: () => void\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\nconst CartContent = createCartContent<IMediaRightGroup>({\r\n labels: {\r\n title: 'Your Playlist',\r\n buttonCheckout: 'Show in playlist',\r\n itemsSuffixMany: 'playlists',\r\n itemsSuffixSingle: 'playlist'\r\n },\r\n empty: {\r\n title: 'Your playlist is empty',\r\n subTitle: 'Try adding some playlist'\r\n }\r\n})\r\n\r\nconst CartItem = createCartItem<IMediaRightItem>({})\r\n\r\nexport const MediaGroupWidget: React.FC<IMediaGroupWidgetProps> = (props) => {\r\n const { localStorageKey } = props\r\n const { groups } = useMediaRightStore({ localStorageKey })\r\n const actions = useMediaRightActions({ localStorageKey })\r\n const theme = useTheme()\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\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 })\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 = useCallback(\r\n () => (\r\n <CartContent\r\n isMobile={isMobile}\r\n carts={groups}\r\n onClose={() => setAnchorEl(null)}\r\n onCheckout={() => setAnchorEl(null)}\r\n buttonMoveToCartProps={props.buttonMoveToCartProps}\r\n slots={{\r\n headerLeftProps: {\r\n flexDirection: 'row',\r\n alignItems: 'flex-end',\r\n justifyContent: 'space-between',\r\n gap: 1,\r\n flex: 1\r\n },\r\n headerRight: (ctx) => canAddGroup(groups) && <NewGroupArea onSaveGroup={handleSaveNewGroup} />,\r\n item: (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 accordionDetailsProps={{\r\n sx: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n gap: 1,\r\n p: 1,\r\n '& .MuiAccordionDetails-root': { p: 0 }\r\n }\r\n }}\r\n renderItem={(item) => (\r\n <CartItem\r\n item={item}\r\n key={item.ProductId}\r\n name={item.ProductName}\r\n imageUrl={item.PictureUrl}\r\n onRemoveCart={() => handleDeleteMedia(group.id, item.ProductId)}\r\n itemTitleProps={props.itemTitleProps}\r\n itemTitlePropsGetter={props.itemTitlePropsGetter}\r\n onClose={() => setAnchorEl(null)}\r\n />\r\n )}\r\n />\r\n )\r\n }}\r\n />\r\n ),\r\n [groups, isMobile, props, expandedGroupId]\r\n )\r\n\r\n return (\r\n <>\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 {isMobile ? (\r\n <Drawer\r\n anchor='right'\r\n open={Boolean(anchorEl)}\r\n onClose={() => setAnchorEl(null)}\r\n disableScrollLock\r\n PaperProps={{ sx: { width: 'calc(100% - 100px)', maxWidth: 360 } }}\r\n >\r\n <Root>{renderContent()}</Root>\r\n </Drawer>\r\n ) : (\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 <Root>{renderContent()}</Root>\r\n </MenuStyled>\r\n )}\r\n </>\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":["CartContent","createCartContent","labels","title","buttonCheckout","itemsSuffixMany","itemsSuffixSingle","empty","subTitle","CartItem","createCartItem","MediaGroupWidget","props","localStorageKey","groups","useMediaRightStore","actions","useMediaRightActions","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","_useState3","_useState4","expandedGroupId","setExpandedGroupId","handleSaveNewGroup","groupName","addGroup","name","handleEditGroup","group","updateGroup","id","handleDeleteGroup","groupId","removeGroup","handleDeleteMedia","productId","removeItem","renderContent","useCallback","_jsx","carts","onClose","onCheckout","buttonMoveToCartProps","slots","headerLeftProps","flexDirection","alignItems","justifyContent","gap","flex","headerRight","ctx","canAddGroup","NewGroupArea","onSaveGroup","item","MediaGroupAccordion","onEditGroup","onDeleteGroup","onDeleteMedia","accordionProps","expanded","onChange","_","isExpanded","accordionDetailsProps","sx","display","position","p","renderItem","ProductName","imageUrl","PictureUrl","onRemoveCart","ProductId","itemTitleProps","itemTitlePropsGetter","_jsxs","_Fragment","children","IconButtonDark","onClick","e","currentTarget","Badge","badgeContent","length","color","PlaylistPlayIcon","Drawer","anchor","open","Boolean","disableScrollLock","PaperProps","width","maxWidth","Root","MenuStyled","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","component","createMediaGroupWidget","params","_MediaGroupWidget","_objectSpread","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/media-right/media-widget/index.tsx"],"sourcesContent":["import { useCallback, useState } from 'react'\r\nimport { Badge, ButtonProps, Drawer, TypographyProps, useMediaQuery, useTheme } from '@mui/material'\r\nimport PlaylistPlayIcon from '@mui/icons-material/PlaylistPlay'\r\nimport { MenuStyled, Root } from './styled'\r\nimport { IconButtonDark } from '../../components/buttons'\r\nimport { MediaGroupAccordion } from './media-group-accordion'\r\nimport { useMediaRightStore, useMediaRightActions } from '../hooks'\r\nimport type { IMediaRightGroup, IMediaRightItem } from '../types'\r\nimport createCartContent from '../../factory/cart-content/create.cart-content'\r\nimport createCartItem from '../../factory/cart-item/create.cart-item'\r\nimport { NewGroupArea } from './new-group-area'\r\n\r\nexport interface IMediaGroupWidgetProps {\r\n itemTitleProps?: TypographyProps & { [key: string]: any }\r\n itemTitlePropsGetter?: (item: IMediaRightItem, onClose?: () => void) => TypographyProps & { [key: string]: any }\r\n onClose?: () => void\r\n hrefCart?: string\r\n buttonMoveToCartProps?: ButtonProps & { [key: string]: any }\r\n onDetailClick?: ButtonProps['onClick']\r\n}\r\n\r\nconst CartContent = createCartContent<IMediaRightGroup>({\r\n labels: {\r\n title: 'Your Playlist',\r\n buttonCheckout: 'Show in playlist',\r\n itemsSuffixMany: 'playlists',\r\n itemsSuffixSingle: 'playlist'\r\n },\r\n empty: {\r\n title: 'Your playlist is empty',\r\n subTitle: 'Try adding some playlist'\r\n }\r\n})\r\n\r\nconst CartItem = createCartItem<IMediaRightItem>({})\r\n\r\nexport const MediaGroupWidget: React.FC<IMediaGroupWidgetProps> = (props) => {\r\n const { groups, options } = useMediaRightStore()\r\n const actions = useMediaRightActions()\r\n const theme = useTheme()\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'))\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 })\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 = useCallback(\r\n () => (\r\n <CartContent\r\n isMobile={isMobile}\r\n carts={groups}\r\n onClose={() => setAnchorEl(null)}\r\n onCheckout={() => setAnchorEl(null)}\r\n buttonMoveToCartProps={props.buttonMoveToCartProps}\r\n slots={{\r\n headerLeftProps: {\r\n flexDirection: 'row',\r\n alignItems: 'flex-end',\r\n justifyContent: 'space-between',\r\n gap: 1,\r\n flex: 1\r\n },\r\n headerRight: () =>\r\n groups.length < options.maxGroup && (\r\n <NewGroupArea textFieldProps={{ inputProps: { maxLength: options.maxNameGroup } }} onSaveGroup={handleSaveNewGroup} />\r\n ),\r\n item: (group) => (\r\n <MediaGroupAccordion\r\n key={group.id}\r\n group={group}\r\n options={options}\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 inlineEditingProps={{\r\n textField: {\r\n inputProps: { maxLength: options.maxNameGroup }\r\n }\r\n }}\r\n accordionDetailsProps={{\r\n sx: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n position: 'relative',\r\n gap: 1,\r\n p: 1,\r\n '& .MuiAccordionDetails-root': { p: 0 }\r\n }\r\n }}\r\n renderItem={(item) => (\r\n <CartItem\r\n item={item}\r\n key={item.ProductId}\r\n name={item.ProductName}\r\n imageUrl={item.PictureUrl}\r\n onRemoveCart={() => handleDeleteMedia(group.id, item.ProductId)}\r\n itemTitleProps={props.itemTitleProps}\r\n itemTitlePropsGetter={props.itemTitlePropsGetter}\r\n onClose={() => setAnchorEl(null)}\r\n />\r\n )}\r\n />\r\n )\r\n }}\r\n />\r\n ),\r\n [groups, isMobile, props, expandedGroupId]\r\n )\r\n\r\n return (\r\n <>\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 {isMobile ? (\r\n <Drawer\r\n anchor='right'\r\n open={Boolean(anchorEl)}\r\n onClose={() => setAnchorEl(null)}\r\n disableScrollLock\r\n PaperProps={{ sx: { width: 'calc(100% - 100px)', maxWidth: 360 } }}\r\n >\r\n <Root>{renderContent()}</Root>\r\n </Drawer>\r\n ) : (\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 <Root>{renderContent()}</Root>\r\n </MenuStyled>\r\n )}\r\n </>\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":["CartContent","createCartContent","labels","title","buttonCheckout","itemsSuffixMany","itemsSuffixSingle","empty","subTitle","CartItem","createCartItem","MediaGroupWidget","props","_useMediaRightStore","useMediaRightStore","groups","options","actions","useMediaRightActions","theme","useTheme","isMobile","useMediaQuery","breakpoints","down","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","_useState3","_useState4","expandedGroupId","setExpandedGroupId","handleSaveNewGroup","groupName","addGroup","name","handleEditGroup","group","updateGroup","id","handleDeleteGroup","groupId","removeGroup","handleDeleteMedia","productId","removeItem","renderContent","useCallback","_jsx","carts","onClose","onCheckout","buttonMoveToCartProps","slots","headerLeftProps","flexDirection","alignItems","justifyContent","gap","flex","headerRight","length","maxGroup","NewGroupArea","textFieldProps","inputProps","maxLength","maxNameGroup","onSaveGroup","item","MediaGroupAccordion","onEditGroup","onDeleteGroup","onDeleteMedia","accordionProps","expanded","onChange","_","isExpanded","inlineEditingProps","textField","accordionDetailsProps","sx","display","position","p","renderItem","ProductName","imageUrl","PictureUrl","onRemoveCart","ProductId","itemTitleProps","itemTitlePropsGetter","_jsxs","_Fragment","children","IconButtonDark","onClick","e","currentTarget","Badge","badgeContent","color","PlaylistPlayIcon","Drawer","anchor","open","Boolean","disableScrollLock","PaperProps","width","maxWidth","Root","MenuStyled","anchorOrigin","vertical","horizontal","transformOrigin","MenuListProps","component","createMediaGroupWidget","params","_MediaGroupWidget","_objectSpread","displayName"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as
|
|
1
|
+
import{defineProperty as i,slicedToArray as o,objectSpread2 as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as n,jsx as r}from"react/jsx-runtime";import{useState as t}from"react";import{styled as a,Accordion as l,alpha as d,accordionSummaryClasses as m,Box as p,Typography as u,AccordionSummary as c,Badge as s,IconButton as g,AccordionDetails as f}from"@mui/material";import x from"@mui/icons-material/Edit";import h from"@mui/icons-material/ExpandMore";import b from"@mui/icons-material/FolderOutlined";import{DeleteButton as v}from"./button.delete.js";import{InlineEditing as y}from"./inline-editing.js";import{NoDataPanel as P}from"../../components/no-data-panel.js";var k=function(i){var a,l,d,m=t(!1),p=o(m,2),u=p[0],k=p[1];return n(E,e(e({component:"div"},i.accordionProps),{},{sx:e({my:"0 !important"},null===(a=i.accordionProps)||void 0===a?void 0:a.sx),children:[r(c,e(e({component:"div",expandIcon:r(h,{})},i.accordionSummaryProps),{},{children:n(W,{children:[r(s,{badgeContent:i.group.items.length,color:"primary",children:r(b,{fontSize:"small"})}),n(y,e(e({isEdit:u,setShowEdit:k,onSubmit:function(o){i.onEditGroup(e(e({},i.group),{},{name:o})),k(!1)},defaultValue:i.group.name,sxForm:{flex:1}},i.inlineEditingProps),{},{textField:e(e({},null===(l=i.inlineEditingProps)||void 0===l?void 0:l.textField),{},{sx:e({flex:1,minWidth:0,"& .MuiOutlinedInput-root":{height:"32px"}},null===(d=i.inlineEditingProps)||void 0===d||null===(d=d.textField)||void 0===d?void 0:d.sx)}),children:[r(F,{variant:"body2",noWrap:!0,title:i.group.name,children:i.group.name}),r(g,{size:"small",onClick:function(i){i.stopPropagation(),k(!0)},color:"success",children:r(x,{fontSize:"small"})}),r(v,{onDelete:function(){return i.onDeleteGroup(i.group.id)},size:"small"})]}),i.group.id+i.group.name+u)]})})),r(f,e(e({},i.accordionDetailsProps),{},{children:i.group.items.length>0?i.group.items.map(function(o){return i.renderItem?i.renderItem(o):null}):r(P,{title:"No media in this playlist",sx:{flex:1}})}))]}))},E=a(l)(function(o){var e=o.theme;return i({backgroundColor:"transparent",boxShadow:"none",backgroundImage:"none","&:before":{display:"none"},"&.Mui-expanded":{margin:0}},".".concat(m.root),i({position:"sticky",top:0,zIndex:1,background:d(e.palette.background.paper,.6),backdropFilter:"blur(500px)",WebkitBackdropFilter:"blur(500px)",borderRadius:"12px",minWidth:0},"& .".concat(m.content),{minWidth:0,margin:0}))}),W=a(p)(function(i){return{display:"flex",alignItems:"center",flex:1,gap:i.theme.spacing(1),minWidth:0}}),F=a(u)(function(i){var o=i.theme;return{fontWeight:600,flex:1,minWidth:0,color:o.palette.text.primary,marginLeft:o.spacing(1)}});export{W as ItemBox,F as ItemTitle,k as MediaGroupAccordion,E as PlaylistAccordion};
|
|
2
2
|
//# sourceMappingURL=media-group-accordion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-group-accordion.js","sources":["../../../src/media-right/media-widget/media-group-accordion.tsx"],"sourcesContent":["// imports\r\nimport { useState } from 'react'\r\nimport { Accordion, AccordionSummary, AccordionDetails, Box
|
|
1
|
+
{"version":3,"file":"media-group-accordion.js","sources":["../../../src/media-right/media-widget/media-group-accordion.tsx"],"sourcesContent":["// imports\r\nimport { useState } from 'react'\r\nimport { Accordion, AccordionSummary, AccordionDetails, Box } from '@mui/material'\r\nimport { Typography, IconButton, styled, accordionSummaryClasses, Badge, alpha } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore'\r\nimport FolderOutlinedIcon from '@mui/icons-material/FolderOutlined'\r\nimport { DeleteButton } from './button.delete'\r\nimport { InlineEditing } from './inline-editing'\r\nimport { NoDataPanel } from '../../components'\r\n// types\r\nimport type { ComponentType, FC, MouseEvent } from 'react'\r\nimport type { AccordionProps, AccordionDetailsProps, AccordionSummaryProps, BoxProps, TypographyProps } from '@mui/material'\r\nimport type { IMediaRightGroup, IMediaRightItem, IMediaRightOptions } from '../types'\r\nimport type { IInlineEditingProps } from './inline-editing'\r\n\r\nexport interface IMediaGroupAccordionProps {\r\n group: IMediaRightGroup\r\n options: IMediaRightOptions\r\n accordionProps?: Partial<AccordionProps>\r\n accordionSummaryProps?: Partial<AccordionSummaryProps>\r\n accordionDetailsProps?: Partial<AccordionDetailsProps>\r\n inlineEditingProps?: Partial<IInlineEditingProps>\r\n renderItem?: (item: IMediaRightItem) => React.ReactNode\r\n onEditGroup: (group: IMediaRightGroup) => void\r\n onDeleteGroup: (groupId: string) => void\r\n onDeleteMedia: (groupId: string, mediaId: string) => void\r\n}\r\n\r\nexport const MediaGroupAccordion: FC<IMediaGroupAccordionProps> = (props) => {\r\n const [isEditing, setIsEditing] = useState(false)\r\n\r\n const handleSaveEdit = (value: string) => {\r\n props.onEditGroup({ ...props.group, name: value })\r\n setIsEditing(false)\r\n }\r\n\r\n const handleEditClick = (e: MouseEvent) => {\r\n e.stopPropagation()\r\n setIsEditing(true)\r\n }\r\n\r\n return (\r\n <PlaylistAccordion component='div' {...props.accordionProps} sx={{ my: '0 !important', ...props.accordionProps?.sx }}>\r\n <AccordionSummary component='div' expandIcon={<ExpandMoreIcon />} {...props.accordionSummaryProps}>\r\n <ItemBox>\r\n <Badge badgeContent={props.group.items.length} color='primary'>\r\n <FolderOutlinedIcon fontSize='small' />\r\n </Badge>\r\n <InlineEditing\r\n key={props.group.id + props.group.name + isEditing}\r\n isEdit={isEditing}\r\n setShowEdit={setIsEditing}\r\n onSubmit={handleSaveEdit}\r\n defaultValue={props.group.name}\r\n sxForm={{ flex: 1 }}\r\n {...props.inlineEditingProps}\r\n textField={{\r\n ...props.inlineEditingProps?.textField,\r\n sx: { flex: 1, minWidth: 0, '& .MuiOutlinedInput-root': { height: '32px' }, ...props.inlineEditingProps?.textField?.sx }\r\n }}\r\n >\r\n <ItemTitle variant='body2' noWrap title={props.group.name}>\r\n {props.group.name}\r\n </ItemTitle>\r\n {/* <Chip sx={{ fontSize: '12px' }} label={`${props.group.items.length} items`} size='small' /> */}\r\n <IconButton size='small' onClick={handleEditClick} color='success'>\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n <DeleteButton onDelete={() => props.onDeleteGroup(props.group.id)} size='small' />\r\n </InlineEditing>\r\n </ItemBox>\r\n </AccordionSummary>\r\n <AccordionDetails {...props.accordionDetailsProps}>\r\n {props.group.items.length > 0 ? (\r\n props.group.items.map((item) => (props.renderItem ? props.renderItem(item) : null))\r\n ) : (\r\n <NoDataPanel title={'No media in this playlist'} sx={{ flex: 1 }} />\r\n )}\r\n </AccordionDetails>\r\n </PlaylistAccordion>\r\n )\r\n}\r\n\r\nexport const PlaylistAccordion: ComponentType<AccordionProps> = styled(Accordion)(({ theme }) => ({\r\n backgroundColor: 'transparent',\r\n boxShadow: 'none',\r\n backgroundImage: 'none',\r\n '&:before': { display: 'none' },\r\n '&.Mui-expanded': { margin: 0 },\r\n [`.${accordionSummaryClasses.root}`]: {\r\n position: 'sticky',\r\n top: 0,\r\n zIndex: 1,\r\n background: alpha(theme.palette.background.paper, 0.6),\r\n backdropFilter: 'blur(500px)',\r\n WebkitBackdropFilter: 'blur(500px)',\r\n borderRadius: '12px',\r\n minWidth: 0,\r\n [`& .${accordionSummaryClasses.content}`]: {\r\n minWidth: 0,\r\n margin: 0\r\n }\r\n }\r\n}))\r\n\r\nexport const ItemBox: ComponentType<BoxProps> = styled(Box)(({ theme }) => ({\r\n display: 'flex',\r\n alignItems: 'center',\r\n flex: 1,\r\n gap: theme.spacing(1),\r\n minWidth: 0\r\n}))\r\n\r\nexport const ItemTitle: ComponentType<TypographyProps> = styled(Typography)(({ theme }) => ({\r\n fontWeight: 600,\r\n flex: 1,\r\n minWidth: 0,\r\n color: theme.palette.text.primary,\r\n marginLeft: theme.spacing(1)\r\n}))\r\n"],"names":["MediaGroupAccordion","props","_props$accordionProps","_props$inlineEditingP","_props$inlineEditingP2","_useState","useState","_useState2","_slicedToArray","isEditing","setIsEditing","_jsxs","PlaylistAccordion","_objectSpread","component","accordionProps","sx","my","_jsx","AccordionSummary","expandIcon","ExpandMoreIcon","accordionSummaryProps","children","ItemBox","Badge","badgeContent","group","items","length","color","FolderOutlinedIcon","fontSize","InlineEditing","isEdit","setShowEdit","onSubmit","value","onEditGroup","name","defaultValue","sxForm","flex","inlineEditingProps","textField","minWidth","height","ItemTitle","variant","noWrap","title","IconButton","size","onClick","e","stopPropagation","EditIcon","DeleteButton","onDelete","onDeleteGroup","id","AccordionDetails","accordionDetailsProps","map","item","renderItem","NoDataPanel","styled","Accordion","_ref","theme","_defineProperty","backgroundColor","boxShadow","backgroundImage","display","margin","concat","accordionSummaryClasses","root","position","top","zIndex","background","alpha","palette","paper","backdropFilter","WebkitBackdropFilter","borderRadius","content","Box","_ref3","alignItems","gap","spacing","Typography","_ref4","fontWeight","text","primary","marginLeft"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as
|
|
1
|
+
import{slicedToArray as r,objectSpread2 as t}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import{useState as e}from"react";import{InlineEditing as o}from"./inline-editing.js";import{NewCollectionButton as l}from"../unit.control.js";import{Box as n}from"@mui/material";var m=function(m){var a=m.textFieldProps,p=m.onSaveGroup,s=e(!1),c=r(s,2),d=c[0],u=c[1];return i(n,{sx:{p:1,pt:0,width:"100%"},children:i(o,{isEdit:d,onSubmit:function(r){r.trim()&&(p(r.trim()),u(!1))},setShowEdit:u,textField:t({label:"Playlist name",placeholder:"Enter playlist name",sx:{width:"100%"}},a),children:i(l,{onClick:function(){u(!0)}})})})};export{m 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 {
|
|
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 { NewCollectionButton } from '../unit.control'\r\nimport { Box } from '@mui/material'\r\nimport type { TextFieldProps } from '@mui/material'\r\n\r\ninterface INewGroupAreaProps {\r\n textFieldProps: Partial<TextFieldProps>\r\n onSaveGroup: (groupName: string) => void\r\n}\r\n\r\nexport const NewGroupArea: React.FC<INewGroupAreaProps> = ({ textFieldProps, 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 sx: { width: '100%' },\r\n ...textFieldProps\r\n }}\r\n >\r\n <NewCollectionButton onClick={handleNewGroupClick} />\r\n </InlineEditing>\r\n </Box>\r\n )\r\n}\r\n"],"names":["NewGroupArea","_ref","textFieldProps","onSaveGroup","_useState","useState","_useState2","_slicedToArray","showNewGroupInput","setShowNewGroupInput","_jsx","Box","sx","p","pt","width","children","InlineEditing","isEdit","onSubmit","value","trim","setShowEdit","textField","_objectSpread","label","placeholder","NewCollectionButton","onClick"],"mappings":"6TAWaA,EAA6C,SAAjCC,GAAqE,IAAjCC,EAAcD,EAAdC,eAAgBC,EAAWF,EAAXE,YAC3EC,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,UAASC,EAAA,CACPC,MAAO,gBACPC,YAAa,sBACbd,GAAI,CAAEG,MAAO,SACVb,GAGLc,SAAAN,EAACiB,EAAmB,CAACC,QAxBC,WAC1BnB,GAAqB,EACtB,OA0BH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{styled as
|
|
1
|
+
import{styled as a,Stack as r,Menu as t}from"@mui/material";var o=a(r)(function(a){return a.theme,{height:"100%"}}),e=a(t)(function(a){var r=a.theme;return{marginTop:"45px","> .MuiPaper-root":{position:"relative",overflow:"visible",display:"flex",flexDirection:"column",backgroundColor:r.palette.background.paper,borderRadius:r.shape.borderRadius,minWidth:"280px",maxWidth:"550px",boxShadow:r.shadows[5],animation:"fadeInDown 0.3s ease-out",marginTop:"8px",color:r.palette.text.primary,"@keyframes fadeInDown":{"0%":{opacity:0,transform:"translateY(-10px)"},"100%":{opacity:1,transform:"translateY(0)"}},"&::before":{content:'""',position:"absolute",backgroundColor:r.palette.background.paper,backgroundImage:"linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))",width:"10px",height:"10px",top:"-4px",right:r.spacing(1),transform:"translateX(-50%) rotate(45deg)",zIndex:0}},".MuiBackdrop-root":{backgroundColor:"transparent"},".MuiList-root":{padding:0,height:"100%",minHeight:0,maxHeight:"60vh"}}});export{e as MenuStyled,o as Root};
|
|
2
2
|
//# sourceMappingURL=styled.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styled.js","sources":["../../../src/media-right/media-widget/styled.tsx"],"sourcesContent":["import { Menu, styled, Stack } from '@mui/material'\r\nimport type { ComponentType } from 'react'\r\nimport type { MenuProps, StackProps } from '@mui/material'\r\n\r\nexport const Root: ComponentType<StackProps> = styled(Stack)(({ theme }) => ({\r\n
|
|
1
|
+
{"version":3,"file":"styled.js","sources":["../../../src/media-right/media-widget/styled.tsx"],"sourcesContent":["import { Menu, styled, Stack } from '@mui/material'\r\nimport type { ComponentType } from 'react'\r\nimport type { MenuProps, StackProps } from '@mui/material'\r\n\r\nexport const Root: ComponentType<StackProps> = styled(Stack)(({ theme }) => ({\r\n height: '100%'\r\n}))\r\n\r\nexport const MenuStyled: ComponentType<MenuProps> = styled(Menu)(({ theme }) => ({\r\n marginTop: '45px',\r\n '> .MuiPaper-root': {\r\n position: 'relative',\r\n overflow: 'visible',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n backgroundColor: theme.palette.background.paper,\r\n borderRadius: theme.shape.borderRadius,\r\n minWidth: '280px',\r\n maxWidth: '550px',\r\n boxShadow: theme.shadows[5],\r\n animation: 'fadeInDown 0.3s ease-out',\r\n marginTop: '8px',\r\n color: theme.palette.text.primary,\r\n\r\n '@keyframes fadeInDown': {\r\n '0%': { opacity: 0, transform: 'translateY(-10px)' },\r\n '100%': { opacity: 1, transform: 'translateY(0)' }\r\n },\r\n\r\n '&::before': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n backgroundColor: theme.palette.background.paper,\r\n backgroundImage: 'linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05))',\r\n width: '10px',\r\n height: '10px',\r\n top: '-4px',\r\n right: theme.spacing(1),\r\n transform: 'translateX(-50%) rotate(45deg)',\r\n zIndex: 0\r\n }\r\n },\r\n '.MuiBackdrop-root': { backgroundColor: 'transparent' },\r\n '.MuiList-root': { padding: 0, height: '100%', minHeight: 0, maxHeight: '60vh' }\r\n}))\r\n"],"names":["Root","styled","Stack","_ref","theme","height","MenuStyled","Menu","_ref2","marginTop","position","overflow","display","flexDirection","backgroundColor","palette","background","paper","borderRadius","shape","minWidth","maxWidth","boxShadow","shadows","animation","color","text","primary","opacity","transform","content","backgroundImage","width","top","right","spacing","zIndex","padding","minHeight","maxHeight"],"mappings":"4DAIO,IAAMA,EAAkCC,EAAOC,EAAPD,CAAc,SAAAE,GAAQ,OAAAA,EAALC,MAAa,CAC3EC,OAAQ,OACT,GAEYC,EAAuCL,EAAOM,EAAPN,CAAa,SAAAO,GAAA,IAAGJ,EAAKI,EAALJ,MAAK,MAAQ,CAC/EK,UAAW,OACX,mBAAoB,CAClBC,SAAU,WACVC,SAAU,UACVC,QAAS,OACTC,cAAe,SACfC,gBAAiBV,EAAMW,QAAQC,WAAWC,MAC1CC,aAAcd,EAAMe,MAAMD,aAC1BE,SAAU,QACVC,SAAU,QACVC,UAAWlB,EAAMmB,QAAQ,GACzBC,UAAW,2BACXf,UAAW,MACXgB,MAAOrB,EAAMW,QAAQW,KAAKC,QAE1B,wBAAyB,CACvB,KAAM,CAAEC,QAAS,EAAGC,UAAW,qBAC/B,OAAQ,CAAED,QAAS,EAAGC,UAAW,kBAGnC,YAAa,CACXC,QAAS,KACTpB,SAAU,WACVI,gBAAiBV,EAAMW,QAAQC,WAAWC,MAC1Cc,gBAAiB,wEACjBC,MAAO,OACP3B,OAAQ,OACR4B,IAAK,OACLC,MAAO9B,EAAM+B,QAAQ,GACrBN,UAAW,iCACXO,OAAQ,IAGZ,oBAAqB,CAAEtB,gBAAiB,eACxC,gBAAiB,CAAEuB,QAAS,EAAGhC,OAAQ,OAAQiC,UAAW,EAAGC,UAAW,QACzE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as o,createClass as
|
|
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{mediaRightDefaultOptions as l}from"./configs.js";import{MediaRightEventStore as i}from"./event-store.js";import{v4 as s}from"uuid";var u=e(function e(){t(this,e),o(this,"localStorageKey","__media_right_default__"),o(this,"store",new i),o(this,"maxItemsPerGroup",l.MAX_ITEMS_PER_GROUP),o(this,"maxGroup",l.MAX_GROUP),o(this,"maxNameGroup",l.MAX_NAME_GROUP),o(this,"maxChannels",l.MAX_CHANNELS)}),c=function(){function l(){t(this,l)}return e(l,[{key:"getOptions",value:function(){var o=l.provider;return{localStorageKey:o.localStorageKey,maxItemsPerGroup:o.maxItemsPerGroup,maxGroup:o.maxGroup,maxNameGroup:o.maxNameGroup,maxChannels:o.maxChannels}}},{key:"initialize",value:function(){l.provider.store.emit("requestState",{})}},{key:"subscribe",value:function(o,e){return l.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=l.provider.maxGroup;if(t>=n)throw new Error("Maximum playlist limit reached (".concat(n,")"));var i=l.provider.maxNameGroup;if(e.name&&e.name.length>i)throw new Error("Playlist name exceeds maximum length (".concat(i,")"));var u=r(r({},e),{},{id:s(),createdAt:Date.now(),items:[],channels:[]}),c=r(r({},a.groups),{},o({},u.id,u));return this.saveToLocalStorage(c),u}},{key:"updateGroup",value:function(e,a){var t=this.loadFromLocalStorage();if(t.groups[e]){var n=l.provider.maxNameGroup;if(a.name&&a.name.length>n)throw new Error("Playlist name exceeds maximum length (".concat(n,")"));var i=r(r({},t.groups),{},o({},e,r(r({},t.groups[e]),a)));this.saveToLocalStorage(i)}}},{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(),i=n.groups[e];if(!i)throw new Error("Playlist not found");var u=l.provider.maxChannels;if(i.channels.length>=u)throw new Error('Playlist "'.concat(i.name,'" has reached maximum channels limit (').concat(u,")"));var c=r(r({},t),{},{Id:s()}),m=r(r({},i),{},{channels:[].concat(a(i.channels),[c])}),v=r(r({},n.groups),{},o({},e,m));this.saveToLocalStorage(v)}},{key:"updateChannel",value:function(e,t,n){var l=this.loadFromLocalStorage(),i=l.groups[e];if(!i)throw new Error("Playlist not found");var s=i.channels.findIndex(function(o){return o.Id===t});if(-1===s)throw new Error("Channel ".concat(t," not found in playlist ").concat(i.name));var u=a(i.channels);u[s]=r(r({},u[s]),n);var c=r(r({},l.groups),{},o({},e,r(r({},i),{},{channels:u})));this.saveToLocalStorage(c)}},{key:"removeChannel",value:function(e,t){var n=this.loadFromLocalStorage(),l=n.groups[e];if(!l)throw new Error("Playlist not found");var i=l.channels.findIndex(function(o){return o.Id===t});if(-1===i)throw new Error("Channel ".concat(t," not found in playlist ").concat(l.name));var s=a(l.channels);s.splice(i,1);var u=r(r({},n.groups),{},o({},e,r(r({},l),{},{channels:s})));this.saveToLocalStorage(u)}},{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("Playlist not found");var i,s=n.items.findIndex(function(o){return o.ProductId===e.ProductId}),u=l.provider.maxItemsPerGroup;if(-1===s&&n.items.length>=u)throw new Error('Playlist "'.concat(n.name,'" has reached maximum items limit (').concat(u,")"));s>=0?(i=a(n.items))[s]=e:i=[].concat(a(n.items),[e]);var c=r(r({},t.groups),{},o({},e.GroupId,r(r({},n),{},{items:i})));this.saveToLocalStorage(c)}},{key:"updateItem",value:function(e,t,n){var l=this.loadFromLocalStorage(),i=l.groups[e];if(!i)throw new Error("Playlist not found");var s=i.items.findIndex(function(o){return o.ProductId===t});if(-1===s)throw new Error("Item ".concat(t," not found in playlist ").concat(i.name));var u=a(i.items);u[s]=r(r({},u[s]),n);var c=r(r({},l.groups),{},o({},e,r(r({},i),{},{items:u})));this.saveToLocalStorage(c)}},{key:"removeItem",value:function(e,a){var t=this.loadFromLocalStorage(),n=t.groups[e];if(!n)throw new Error("Playlist not found");var l=n.items.filter(function(o){return o.ProductId!==a}),i=r(r({},t.groups),{},o({},e,r(r({},n),{},{items:l})));this.saveToLocalStorage(i)}},{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(l.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 playlist from localStorage:",o)}return o}},{key:"saveToLocalStorage",value:function(o){if("undefined"!=typeof globalThis&&globalThis.localStorage)if(l.provider.localStorageKey){var e={version:"1.0",groups:o};localStorage.setItem(l.provider.localStorageKey,JSON.stringify(e)),l.provider.store.emit("stateChange",{groups:o})}else console.warn("No localStorageKey provided, skipping storage")}}],[{key:"provider",get:function(){var o;return null!==(o=n(l.key_provider).get())&&void 0!==o?o:new u}},{key:"setProvider",value:function(o){n(l.key_provider).set(null!=o?o:new u)}},{key:"setOptions",value:function(o){var e=l.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),l.setProvider(e)}}])}();o(c,"key_provider","__media_right_key_provider__");var m=new c;export{c as MediaRightService,m 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\nimport { v4 as uuidv4 } from 'uuid'\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>, 'id' | '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, id: uuidv4(), createdAt: Date.now(), items: [], channels: [] }\r\n const updatedGroups = { ...storedData.groups, [newGroup.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: Omit<IMediaRightChannel, 'Id'>): 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 newChannel: IMediaRightChannel = { ...channel, Id: uuidv4() }\r\n const updatedGroup = { ...group, channels: [...group.channels, newChannel] }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: updatedGroup }\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateChannel(groupId: string, channelId: string, updates: Partial<IMediaRightChannel>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) throw new Error(`Playlist ${groupId} not found`)\r\n\r\n const channelIndex = group.channels.findIndex((c) => c.Id === channelId)\r\n if (channelIndex === -1) throw new Error(`Channel ${channelId} not found in playlist ${groupId}`)\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, channelId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) throw new Error(`Playlist ${groupId} not found`)\r\n\r\n const channelIndex = group.channels.findIndex((c) => c.Id === channelId)\r\n if (channelIndex === -1) throw new Error(`Channel ${channelId} not found in playlist ${groupId}`)\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) throw new Error(`Playlist ${groupId} not found`)\r\n\r\n const itemIndex = group.items.findIndex((i) => i.ProductId === productId)\r\n if (itemIndex === -1) throw new Error(`Item ${productId} not found in playlist ${groupId}`)\r\n\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 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) throw new Error(`Playlist ${groupId} not found`)\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","id","uuidv4","createdAt","Date","now","items","channels","updatedGroups","saveToLocalStorage","updates","channel","maxChannels","newChannel","Id","updatedGroup","_toConsumableArray","channelId","channelIndex","findIndex","c","updatedChannels","splice","item","GroupId","updatedItems","existingItemIndex","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 { mediaRightDefaultOptions } from './configs'\r\nimport { MediaRightEventStore } from './event-store'\r\nimport { IMediaRightGroup, IMediaRightItem, IMediaRightChannel, IMediaRightOptions } from './types'\r\nimport { v4 as uuidv4 } from 'uuid'\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 Partial<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 = mediaRightDefaultOptions.MAX_ITEMS_PER_GROUP\r\n maxGroup = mediaRightDefaultOptions.MAX_GROUP\r\n maxNameGroup = mediaRightDefaultOptions.MAX_NAME_GROUP\r\n maxChannels = mediaRightDefaultOptions.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(): Required<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: Partial<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 // option\r\n getOptions(): IMediaRightOptions {\r\n const provider = MediaRightService.provider\r\n return {\r\n localStorageKey: provider.localStorageKey,\r\n maxItemsPerGroup: provider.maxItemsPerGroup,\r\n maxGroup: provider.maxGroup,\r\n maxNameGroup: provider.maxNameGroup,\r\n maxChannels: provider.maxChannels\r\n }\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>, 'id' | 'createdAt' | 'items' | 'channels'>): IMediaRightGroup<O> {\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, id: uuidv4(), createdAt: Date.now(), items: [], channels: [] }\r\n const updatedGroups = { ...storedData.groups, [newGroup.id]: newGroup }\r\n this.saveToLocalStorage(updatedGroups)\r\n return newGroup\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: Omit<IMediaRightChannel, 'Id'>): 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 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 \"${group.name}\" has reached maximum channels limit (${maxChannels})`)\r\n }\r\n\r\n const newChannel: IMediaRightChannel = { ...channel, Id: uuidv4() }\r\n const updatedGroup = { ...group, channels: [...group.channels, newChannel] }\r\n\r\n const updatedGroups = { ...storedData.groups, [groupId]: updatedGroup }\r\n this.saveToLocalStorage(updatedGroups)\r\n }\r\n\r\n updateChannel(groupId: string, channelId: string, updates: Partial<IMediaRightChannel>): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) throw new Error(`Playlist not found`)\r\n\r\n const channelIndex = group.channels.findIndex((c) => c.Id === channelId)\r\n if (channelIndex === -1) throw new Error(`Channel ${channelId} not found in playlist ${group.name}`)\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, channelId: string): void {\r\n const storedData = this.loadFromLocalStorage()\r\n const group = storedData.groups[groupId]\r\n\r\n if (!group) throw new Error(`Playlist not found`)\r\n\r\n const channelIndex = group.channels.findIndex((c) => c.Id === channelId)\r\n if (channelIndex === -1) throw new Error(`Channel ${channelId} not found in playlist ${group.name}`)\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 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 \"${group.name}\" 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) throw new Error(`Playlist not found`)\r\n\r\n const itemIndex = group.items.findIndex((i) => i.ProductId === productId)\r\n if (itemIndex === -1) throw new Error(`Item ${productId} not found in playlist ${group.name}`)\r\n\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 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) throw new Error(`Playlist not found`)\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","mediaRightDefaultOptions","MAX_ITEMS_PER_GROUP","MAX_GROUP","MAX_NAME_GROUP","MAX_CHANNELS","MediaRightService","key","value","provider","localStorageKey","maxItemsPerGroup","maxGroup","maxNameGroup","maxChannels","store","emit","event","callback","subscribe","_storedData$groups","storedData","loadFromLocalStorage","Object","values","groups","_storedData$groups2","groupId","_storedData$groups3","group","currentGroupCount","keys","length","Error","concat","name","newGroup","_objectSpread","id","uuidv4","createdAt","Date","now","items","channels","updatedGroups","saveToLocalStorage","updates","channel","newChannel","Id","updatedGroup","_toConsumableArray","channelId","channelIndex","findIndex","c","updatedChannels","splice","item","GroupId","updatedItems","existingItemIndex","i","ProductId","productId","itemIndex","filter","data","version","globalThis","localStorage","temp","getItem","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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../src/media-right/types.ts"],"sourcesContent":["/**\r\n * Channel information for media rights groups\r\n */\r\nexport enum EChannelType {\r\n Youtube = 'Youtube',\r\n Other = 'Other'\r\n}\r\n\r\nexport interface IMediaRightChannelCreate {\r\n /** URL of the channel */\r\n ChannelUrl: string\r\n /** Name of the channel */\r\n Name: string\r\n /** Type of the channel */\r\n ChannelType: EChannelType\r\n /** Additional custom information */\r\n CustomInfo: string\r\n}\r\n\r\nexport interface IMediaRightChannel extends IMediaRightChannelCreate {\r\n Id: string\r\n}\r\n\r\n/**\r\n * Cart group structure\r\n */\r\nexport interface IMediaRightGroup<O = any> {\r\n /** Unique identifier for the group */\r\n id: string\r\n /** Group name */\r\n name: string\r\n /** Creation timestamp */\r\n createdAt: number\r\n /** Items in this group */\r\n items: IMediaRightItem<O>[]\r\n /** Channels associated with this group */\r\n channels: IMediaRightChannel[]\r\n}\r\n\r\n/**\r\n * Shopping cart item structure\r\n */\r\nexport interface IMediaRightItem<O = any> {\r\n /** Unique identifier for the cart item */\r\n ProductId: string\r\n /** Group ID this item belongs to */\r\n GroupId: string\r\n /** The social URL associated with the product */\r\n // SocialUrl?: string\r\n /** The type of the product, e.g., Media or Audio */\r\n Type?: string\r\n /** The name of the product */\r\n ProductName?: string\r\n /** The picture URL associated with the product */\r\n PictureUrl: string\r\n /** This will be the ID used to stream video or retrieve audio. */\r\n MediaId: string\r\n /** Additional options for the media item */\r\n Options?: O\r\n}\r\n\r\n/**\r\n * Cart summary data\r\n */\r\nexport interface ICartSummary {\r\n totalGroups: number\r\n totalItems: number\r\n totalPrice: number\r\n}\r\n\r\nexport interface IMediaRightOptions {\r\n localStorageKey
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../src/media-right/types.ts"],"sourcesContent":["/**\r\n * Channel information for media rights groups\r\n */\r\nexport enum EChannelType {\r\n Youtube = 'Youtube',\r\n Other = 'Other'\r\n}\r\n\r\nexport interface IMediaRightChannelCreate {\r\n /** URL of the channel */\r\n ChannelUrl: string\r\n /** Name of the channel */\r\n Name: string\r\n /** Type of the channel */\r\n ChannelType: EChannelType\r\n /** Additional custom information */\r\n CustomInfo: string\r\n}\r\n\r\nexport interface IMediaRightChannel extends IMediaRightChannelCreate {\r\n Id: string\r\n}\r\n\r\n/**\r\n * Cart group structure\r\n */\r\nexport interface IMediaRightGroup<O = any> {\r\n /** Unique identifier for the group */\r\n id: string\r\n /** Group name */\r\n name: string\r\n /** Creation timestamp */\r\n createdAt: number\r\n /** Items in this group */\r\n items: IMediaRightItem<O>[]\r\n /** Channels associated with this group */\r\n channels: IMediaRightChannel[]\r\n}\r\n\r\n/**\r\n * Shopping cart item structure\r\n */\r\nexport interface IMediaRightItem<O = any> {\r\n /** Unique identifier for the cart item */\r\n ProductId: string\r\n /** Group ID this item belongs to */\r\n GroupId: string\r\n /** The social URL associated with the product */\r\n // SocialUrl?: string\r\n /** The type of the product, e.g., Media or Audio */\r\n Type?: string\r\n /** The name of the product */\r\n ProductName?: string\r\n /** The picture URL associated with the product */\r\n PictureUrl: string\r\n /** This will be the ID used to stream video or retrieve audio. */\r\n MediaId: string\r\n /** Additional options for the media item */\r\n Options?: O\r\n}\r\n\r\n/**\r\n * Cart summary data\r\n */\r\nexport interface ICartSummary {\r\n totalGroups: number\r\n totalItems: number\r\n totalPrice: number\r\n}\r\n\r\nexport interface IMediaRightOptions {\r\n localStorageKey: string\r\n maxItemsPerGroup: number\r\n maxGroup: number\r\n maxNameGroup: number\r\n maxChannels: number\r\n}\r\n"],"names":["EChannelType"],"mappings":"IAGYA,GAAZ,SAAYA,GACVA,EAAA,QAAA,UACAA,EAAA,MAAA,OACD,CAHD,CAAYA,IAAAA,EAGX,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
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";
|
|
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";var e=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"})},i=function(r){var n=r.value,e=r.onChange,i=r.inputProps;return t(a,{fullWidth:!0,size:"small",label:"Playlist name",value:n,onChange:function(t){return e(t.target.value)},placeholder:"Enter playlist name",autoFocus:!0,variant:"outlined",inputProps:i})};export{e as NewCollectionButton,i as NewCollectionInput};
|
|
2
2
|
//# sourceMappingURL=unit.control.js.map
|