airdcpp-webui 2.13.0-beta.2 → 2.13.0-beta.3
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/index.html +1 -1
- package/dist/js/616.5fb9e1369585863a0090.chunk.js +2 -0
- package/dist/js/616.5fb9e1369585863a0090.chunk.js.gz +0 -0
- package/dist/js/616.5fb9e1369585863a0090.chunk.js.map +1 -0
- package/dist/js/{filelists.9bbe06c108a8677ee055.chunk.js → filelists.36c094bb9481fe161076.chunk.js} +2 -2
- package/dist/js/filelists.36c094bb9481fe161076.chunk.js.gz +0 -0
- package/dist/js/filelists.36c094bb9481fe161076.chunk.js.map +1 -0
- package/dist/js/{files.c892fc18f34c0df21798.chunk.js → files.e2f20d9b781cccf39e46.chunk.js} +2 -2
- package/dist/js/files.e2f20d9b781cccf39e46.chunk.js.gz +0 -0
- package/dist/js/files.e2f20d9b781cccf39e46.chunk.js.map +1 -0
- package/dist/js/{home.8eb92b8f499db1f6b157.chunk.js → home.2214cdc67645b4d98bc7.chunk.js} +3 -3
- package/dist/js/home.2214cdc67645b4d98bc7.chunk.js.gz +0 -0
- package/dist/js/home.2214cdc67645b4d98bc7.chunk.js.map +1 -0
- package/dist/js/{hubs.0519391702abb2ab6fb9.chunk.js → hubs.da174ee10d83d315fd94.chunk.js} +2 -2
- package/dist/js/hubs.da174ee10d83d315fd94.chunk.js.gz +0 -0
- package/dist/js/hubs.da174ee10d83d315fd94.chunk.js.map +1 -0
- package/dist/js/locales/{en-webui-main-json.887642492b267198ad80.chunk.js → en-webui-main-json.122e159ff7cbf9279033.chunk.js} +1 -1
- package/dist/js/locales/en-webui-main-json.122e159ff7cbf9279033.chunk.js.gz +0 -0
- package/dist/js/{main.0e886fb6440bb084150f.entry.js → main.50a26bf428c35f624dad.entry.js} +3 -3
- package/dist/js/main.50a26bf428c35f624dad.entry.js.gz +0 -0
- package/dist/js/{main.0e886fb6440bb084150f.entry.js.map → main.50a26bf428c35f624dad.entry.js.map} +1 -1
- package/dist/js/{messages.ca2775e685980c6c933c.chunk.js → messages.805b014b2ac099b6e9cf.chunk.js} +2 -2
- package/dist/js/messages.805b014b2ac099b6e9cf.chunk.js.gz +0 -0
- package/dist/js/messages.805b014b2ac099b6e9cf.chunk.js.map +1 -0
- package/dist/js/{settings.a2e92d27fef99fbeba03.chunk.js → settings.612ab4ae2ccdaebb1310.chunk.js} +2 -2
- package/dist/js/settings.612ab4ae2ccdaebb1310.chunk.js.gz +0 -0
- package/dist/js/settings.612ab4ae2ccdaebb1310.chunk.js.map +1 -0
- package/dist/sw.js +1 -1
- package/dist/sw.js.gz +0 -0
- package/package.json +1 -1
- package/dist/js/616.47ea358b41bea4430f9c.chunk.js +0 -2
- package/dist/js/616.47ea358b41bea4430f9c.chunk.js.gz +0 -0
- package/dist/js/616.47ea358b41bea4430f9c.chunk.js.map +0 -1
- package/dist/js/filelists.9bbe06c108a8677ee055.chunk.js.gz +0 -0
- package/dist/js/filelists.9bbe06c108a8677ee055.chunk.js.map +0 -1
- package/dist/js/files.c892fc18f34c0df21798.chunk.js.gz +0 -0
- package/dist/js/files.c892fc18f34c0df21798.chunk.js.map +0 -1
- package/dist/js/home.8eb92b8f499db1f6b157.chunk.js.gz +0 -0
- package/dist/js/home.8eb92b8f499db1f6b157.chunk.js.map +0 -1
- package/dist/js/hubs.0519391702abb2ab6fb9.chunk.js.gz +0 -0
- package/dist/js/hubs.0519391702abb2ab6fb9.chunk.js.map +0 -1
- package/dist/js/locales/en-webui-main-json.887642492b267198ad80.chunk.js.gz +0 -0
- package/dist/js/main.0e886fb6440bb084150f.entry.js.gz +0 -0
- package/dist/js/messages.ca2775e685980c6c933c.chunk.js.gz +0 -0
- package/dist/js/messages.ca2775e685980c6c933c.chunk.js.map +0 -1
- package/dist/js/settings.a2e92d27fef99fbeba03.chunk.js.gz +0 -0
- package/dist/js/settings.a2e92d27fef99fbeba03.chunk.js.map +0 -1
- /package/dist/js/{home.8eb92b8f499db1f6b157.chunk.js.LICENSE.txt → home.2214cdc67645b4d98bc7.chunk.js.LICENSE.txt} +0 -0
- /package/dist/js/{main.0e886fb6440bb084150f.entry.js.LICENSE.txt → main.50a26bf428c35f624dad.entry.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"js/files.e2f20d9b781cccf39e46.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Sidebar/routes/Files/style.css","webpack://airdcpp-webui/./src/components/file-preview/decorators/MediaFileDecorator.tsx","webpack://airdcpp-webui/./src/components/file-preview/AudioFile.tsx","webpack://airdcpp-webui/./src/components/file-preview/ImageFile.tsx","webpack://airdcpp-webui/./src/components/file-preview/TextFile.tsx","webpack://airdcpp-webui/./src/components/file-preview/VideoFile.tsx","webpack://airdcpp-webui/./src/components/semantic/Grid.tsx","webpack://airdcpp-webui/./src/decorators/RedrawDecorator.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Files/components/FileFooter.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Files/components/FileContent.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Files/components/FileSession.tsx","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Files/style.css?5f3e","webpack://airdcpp-webui/./src/actions/ui/viewed-file/ViewFileActions.ts","webpack://airdcpp-webui/./src/routes/Sidebar/routes/Files/components/Files.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.file.session {\n flex: 1 1 auto;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n max-width: 100%;\n margin-top: 10px;\n}\n\n.file.session .content {\n flex: 1;\n overflow: auto;\n}\n\n.file.session .content pre {\n overflow: initial;\n}\n\n.file.session.nfo .file-content pre {\n font-family: 'Courier New', 'DejaVu Sans Mono', monospace;\n font-size: 11px;\n line-height: 12px;\n padding: 3px;\n margin: 0px;\n}\n\n.file.session img,\n.file.session video {\n max-width: 100%;\n max-height: 99%;\n}\n\n/* The fullscreen mode conflicts with layout styles in Webkit-based browsers */\n:-webkit-full-screen-ancestor:not(iframe) {\n max-width: inherit !important;\n overflow-x: initial;\n}\n\n:-webkit-full-screen-ancestor:not(iframe) #side-menu {\n visibility: hidden;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Sidebar/routes/Files/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,cAAc;EACd,aAAa;EACb,sBAAsB;EACtB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;AAClB;;AAEA;EACE,OAAO;EACP,cAAc;AAChB;;AAEA;EACE,iBAAiB;AACnB;;AAEA;EACE,yDAAyD;EACzD,eAAe;EACf,iBAAiB;EACjB,YAAY;EACZ,WAAW;AACb;;AAEA;;EAEE,eAAe;EACf,eAAe;AACjB;;AAEA,8EAA8E;AAC9E;EACE,6BAA6B;EAC7B,mBAAmB;AACrB;;AAEA;EACE,kBAAkB;AACpB\",\"sourcesContent\":[\".file.session {\\n flex: 1 1 auto;\\n display: flex;\\n flex-direction: column;\\n max-height: 100%;\\n max-width: 100%;\\n margin-top: 10px;\\n}\\n\\n.file.session .content {\\n flex: 1;\\n overflow: auto;\\n}\\n\\n.file.session .content pre {\\n overflow: initial;\\n}\\n\\n.file.session.nfo .file-content pre {\\n font-family: 'Courier New', 'DejaVu Sans Mono', monospace;\\n font-size: 11px;\\n line-height: 12px;\\n padding: 3px;\\n margin: 0px;\\n}\\n\\n.file.session img,\\n.file.session video {\\n max-width: 100%;\\n max-height: 99%;\\n}\\n\\n/* The fullscreen mode conflicts with layout styles in Webkit-based browsers */\\n:-webkit-full-screen-ancestor:not(iframe) {\\n max-width: inherit !important;\\n overflow-x: initial;\\n}\\n\\n:-webkit-full-screen-ancestor:not(iframe) #side-menu {\\n visibility: hidden;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import * as React from 'react';\n\nconst formatMediaError = (event: React.SyntheticEvent<HTMLMediaElement>) => {\n const error: MediaError = (event.target as any).error;\n switch (error.code) {\n case error.MEDIA_ERR_NETWORK:\n return 'A network error caused the media download to fail';\n case error.MEDIA_ERR_DECODE:\n // eslint-disable-next-line max-len\n return 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support';\n case error.MEDIA_ERR_SRC_NOT_SUPPORTED:\n // eslint-disable-next-line max-len\n return 'The media could not be loaded, either because the file was not found, network failed or because the format is not supported by your browser';\n default:\n return 'An unknown media error occurred';\n }\n};\n\nexport interface MediaFileDecoratorChildProps\n extends Pick<MediaFileDecoratorProps, 'url'> {\n mediaRef: React.Ref<HTMLMediaElement>;\n mediaProps: {\n onError: (event: React.SyntheticEvent<HTMLMediaElement>) => void;\n autoPlay: boolean;\n controls: boolean;\n src: string;\n };\n}\n\nexport interface MediaFileDecoratorProps {\n url: string;\n autoPlay: boolean;\n}\n\nexport default function (Component: React.ComponentType<MediaFileDecoratorChildProps>) {\n const MediaFileDecorator = ({ url, autoPlay }: MediaFileDecoratorProps) => {\n const [error, setError] = React.useState<null | string>(null);\n\n const mediaRef = React.useRef<HTMLMediaElement>(null);\n\n React.useEffect(() => {\n if (mediaRef.current) {\n mediaRef.current.load();\n }\n\n // Reset the error when switching between items\n setError(null);\n }, [url]);\n\n const onMediaError = (event: React.SyntheticEvent<HTMLMediaElement>) => {\n setError(formatMediaError(event));\n };\n\n if (error) {\n return <div>{error}</div>;\n }\n\n const mediaProps = {\n onError: onMediaError,\n autoPlay,\n controls: true,\n src: url,\n };\n\n return <Component mediaRef={mediaRef} mediaProps={mediaProps} url={url} />;\n };\n\n return MediaFileDecorator;\n}\n","import * as React from 'react';\n\nimport MediaFileDecorator, {\n MediaFileDecoratorChildProps,\n} from './decorators/MediaFileDecorator';\n\nconst AudioFile: React.FC<MediaFileDecoratorChildProps> = ({ mediaRef, mediaProps }) => (\n <audio\n ref={mediaRef}\n style={{\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n {...mediaProps}\n />\n);\n\nconst AudioFileDecorated = MediaFileDecorator(AudioFile);\n\nexport { AudioFileDecorated as AudioFile };\n","import * as React from 'react';\n\ninterface ImageFileProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n url: string;\n}\n\nconst ImageFile: React.FC<ImageFileProps> = ({ url }) => (\n <img\n src={url}\n style={{\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n />\n);\n\nexport { ImageFile };\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\n\nimport { TextDecorator } from 'components/text';\nimport Message from 'components/semantic/Message';\n\nimport * as UI from 'types/ui';\nimport { translate } from 'utils/TranslationUtils';\nimport { useTranslation } from 'react-i18next';\nimport Loader from 'components/semantic/Loader';\n\ninterface TextFileProps {\n textGetter: () => Promise<string>;\n url?: string;\n}\n\nconst TextFile: React.FC<TextFileProps> = ({ textGetter, url }) => {\n const [text, setText] = useState<string | null>(null);\n const [error, setError] = useState<Error | null>(null);\n\n const { t } = useTranslation();\n useEffect(() => {\n textGetter().then(setText).catch(setError);\n\n return () => {\n setText(null);\n setError(null);\n };\n }, [url]);\n\n if (!text) {\n if (error) {\n return (\n <Message\n title={translate('Failed to fetch content', t, UI.Modules.COMMON)}\n description={error.message}\n />\n );\n }\n\n return <Loader />;\n }\n\n return (\n <pre>\n <TextDecorator text={text} />\n </pre>\n );\n};\n\nexport { TextFile };\n","import * as React from 'react';\n\nimport MediaFileDecorator, {\n MediaFileDecoratorChildProps,\n} from './decorators/MediaFileDecorator';\n\nconst VideoFile: React.FC<MediaFileDecoratorChildProps> = ({ mediaRef, mediaProps }) => (\n <video\n ref={mediaRef as React.Ref<HTMLVideoElement>}\n style={{\n maxWidth: '100%',\n maxHeight: '100%',\n }}\n {...mediaProps}\n />\n);\n\nconst VideoFileDecorated = MediaFileDecorator(VideoFile);\n\nexport { VideoFileDecorated as VideoFile };\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport { Trans } from 'react-i18next';\r\nimport { toI18nKey } from 'utils/TranslationUtils';\r\n\r\nimport * as UI from 'types/ui';\r\n\r\nexport interface RowProps {\r\n title: React.ReactNode;\r\n text?: React.ReactNode;\r\n titleWidth?: string;\r\n className?: string;\r\n noText?: boolean;\r\n}\r\n\r\nconst formatText = (text: React.ReactNode) => {\r\n if (!!text) {\r\n return text;\r\n }\r\n\r\n return <Trans i18nKey={toI18nKey('na', UI.Modules.COMMON)}>N/A</Trans>;\r\n};\r\n\r\nexport const Row: React.FC<RowProps> = ({\r\n title,\r\n text,\r\n className,\r\n titleWidth = 'four',\r\n noText,\r\n}) => (\r\n <div className={classNames('ui row', className)}>\r\n <div className={classNames(noText ? 'sixteen' : titleWidth, 'wide column title')}>\r\n <div className=\"ui tiny header\" style={{ overflow: 'hidden' }}>\r\n {title}\r\n </div>\r\n </div>\r\n {!noText && <div className=\"column value\">{formatText(text)}</div>}\r\n </div>\r\n);\r\n\r\nexport interface HeaderProps {\r\n title: React.ReactNode;\r\n}\r\n\r\nexport const Header: React.FC<HeaderProps> = ({ title }) => (\r\n <div className=\"ui row\">\r\n <div className=\"sixteen wide column\">\r\n <div className=\"ui blue section header\">{title}</div>\r\n </div>\r\n </div>\r\n);\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n columns?: string;\r\n stackable?: boolean;\r\n}\r\n\r\nexport const Grid: React.FC<GridProps> = ({\r\n className,\r\n children,\r\n columns,\r\n stackable,\r\n ...other\r\n}) => (\r\n <div\r\n className={classNames(\r\n 'ui grid',\r\n //`${columns} column`,\r\n { [`${columns} column`]: !!columns },\r\n { stackable: stackable },\r\n className,\r\n )}\r\n {...other}\r\n >\r\n {children}\r\n </div>\r\n);\r\n","import * as React from 'react';\r\n\r\nexport default function <PropsT>(\r\n Component: React.ComponentType<PropsT>,\r\n redrawIntervalSeconds = 60,\r\n) {\r\n class RedrawDecorator extends React.Component<PropsT> {\r\n redrawTimeout: number | undefined;\r\n\r\n componentDidMount() {\r\n this.scheduleComponentRefresh();\r\n }\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.redrawTimeout);\r\n }\r\n\r\n scheduleComponentRefresh = () => {\r\n this.redrawTimeout = window.setTimeout(() => {\r\n this.forceUpdate();\r\n this.scheduleComponentRefresh();\r\n }, redrawIntervalSeconds * 1000);\r\n };\r\n\r\n render() {\r\n return <Component {...this.props} />;\r\n }\r\n }\r\n\r\n return RedrawDecorator;\r\n}\r\n","import * as React from 'react';\r\n\r\nimport RedrawDecorator from 'decorators/RedrawDecorator';\r\nimport { formatRelativeTime } from 'utils/ValueFormat';\r\nimport { FooterItem, SessionFooter } from 'routes/Sidebar/components/SessionFooter';\r\nimport { useMobileLayout } from 'utils/BrowserUtils';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\ninterface FileFooterProps {\r\n item: API.ViewFile;\r\n sessionT: UI.ModuleTranslator;\r\n}\r\n\r\nconst FileFooter: React.FC<FileFooterProps> = ({ item, sessionT }) => {\r\n if (useMobileLayout()) {\r\n return null;\r\n }\r\n\r\n const downloadState = item.download_state;\r\n return (\r\n <SessionFooter>\r\n <FooterItem\r\n label={sessionT.translate(downloadState ? 'Downloaded' : 'Opened')}\r\n text={formatRelativeTime(\r\n downloadState ? downloadState.time_finished : item.time_opened,\r\n )}\r\n />\r\n </SessionFooter>\r\n );\r\n};\r\n\r\nexport default RedrawDecorator(FileFooter);\r\n","import { memo } from 'react';\r\nimport * as React from 'react';\r\n\r\nimport LoginStore from 'stores/LoginStore';\r\n\r\nimport { AudioFile, ImageFile, VideoFile, TextFile } from 'components/file-preview';\r\n\r\nimport Moment from 'moment';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport { fetchData } from 'utils/HttpUtils';\r\nimport { useRestoreScroll } from 'effects';\r\n\r\nexport interface FileContentProps {\r\n session: API.ViewFile;\r\n sessionT: UI.ModuleTranslator;\r\n scrollPositionHandler: UI.ScrollPositionHandler;\r\n}\r\n\r\ninterface ViewerElementProps {\r\n item: API.ViewFile;\r\n url: string;\r\n type: string;\r\n extension: string;\r\n sessionT: UI.ModuleTranslator;\r\n onReady: () => void;\r\n}\r\n\r\nconst useAutoPlay = (item: API.ViewFile) => {\r\n const diff = Moment.duration(Moment().diff(Moment.unix(item.time_opened)));\r\n return diff.asMinutes() <= 1;\r\n};\r\n\r\nconst getViewerElement = (\r\n item: API.ViewFile,\r\n): React.ComponentType<ViewerElementProps> | null => {\r\n if (item.text) {\r\n // eslint-disable-next-line react/display-name\r\n return (props: ViewerElementProps) => (\r\n <TextFile\r\n {...props}\r\n textGetter={() => {\r\n return fetchData(props.url)\r\n .then((data) => data.text())\r\n .then((text) => {\r\n props.onReady();\r\n return text;\r\n });\r\n }}\r\n url={props.url}\r\n />\r\n );\r\n }\r\n\r\n switch (item.type.content_type) {\r\n case 'audio':\r\n // eslint-disable-next-line react/display-name\r\n return (props: ViewerElementProps) => (\r\n <AudioFile autoPlay={useAutoPlay(item)} {...props} />\r\n );\r\n case 'picture':\r\n // eslint-disable-next-line react/display-name\r\n return (props: ViewerElementProps) => <ImageFile {...props} />;\r\n case 'video':\r\n // eslint-disable-next-line react/display-name\r\n return (props: ViewerElementProps) => (\r\n <VideoFile autoPlay={useAutoPlay(item)} {...props} />\r\n );\r\n default:\r\n }\r\n\r\n return null;\r\n};\r\n\r\nconst getUrl = (tth: string) => {\r\n return `${getBasePath()}view/${tth}?auth_token=${LoginStore.authToken}`;\r\n};\r\n\r\nconst FileContent: React.FC<FileContentProps> = memo(function FileContent({\r\n session,\r\n sessionT,\r\n scrollPositionHandler,\r\n}) {\r\n const { scrollable, restoreScrollPosition } = useRestoreScroll(\r\n scrollPositionHandler,\r\n session,\r\n );\r\n\r\n const ViewerElement = getViewerElement(session);\r\n\r\n let child;\r\n if (!ViewerElement) {\r\n child = sessionT.translate('Unsupported format');\r\n } else {\r\n child = (\r\n <ViewerElement\r\n item={session}\r\n url={getUrl(session.tth)}\r\n type={session.mime_type}\r\n extension={session.type.str}\r\n sessionT={sessionT}\r\n onReady={restoreScrollPosition}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <div ref={scrollable} className=\"content\">\r\n {child}\r\n </div>\r\n );\r\n});\r\n\r\nexport default FileContent;\r\n","import { Component } from 'react';\r\nimport cx from 'classnames';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\nimport Loader from 'components/semantic/Loader';\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport ActiveSessionDecorator from 'decorators/ActiveSessionDecorator';\r\nimport FileFooter from 'routes/Sidebar/routes/Files/components/FileFooter';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nimport FileContent from './FileContent';\r\nimport ViewFileStore from 'stores/ViewFileStore';\r\nimport { SessionChildProps } from 'routes/Sidebar/components/types';\r\n\r\nexport interface FileSessionProps\r\n extends SessionChildProps<API.ViewFile, UI.EmptyObject, UI.EmptyObject> {\r\n session: API.ViewFile;\r\n sessionT: UI.ModuleTranslator;\r\n}\r\n\r\nclass FileSession extends Component<FileSessionProps> {\r\n render() {\r\n const { session, sessionT } = this.props;\r\n if (!session.content_ready) {\r\n if (session.download_state!.id === 'download_failed') {\r\n return (\r\n <div className=\"file session\">\r\n <Message\r\n icon={IconConstants.ERROR}\r\n title={sessionT.translate('Download failed')}\r\n description={session.download_state!.str}\r\n />\r\n </div>\r\n );\r\n }\r\n\r\n return <Loader text={session.download_state!.str} />;\r\n }\r\n\r\n return (\r\n <div className={cx('file session', session.type.str, session.type.content_type)}>\r\n <FileContent\r\n session={session}\r\n sessionT={sessionT}\r\n scrollPositionHandler={ViewFileStore.scroll}\r\n />\r\n <FileFooter item={session} sessionT={sessionT} />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default ActiveSessionDecorator(FileSession);\r\n","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import ViewFileConstants from 'constants/ViewFileConstants';\r\n\r\nimport { BuildRemoveSessionAction } from '../decorators/SessionActionDecorator';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst ViewFileRemoveAction = BuildRemoveSessionAction(\r\n ViewFileConstants.SESSIONS_URL,\r\n API.AccessEnum.VIEW_FILE_EDIT,\r\n);\r\n\r\nconst ViewFileActions: UI.ActionListType<API.ViewFile> = {\r\n remove: ViewFileRemoveAction,\r\n};\r\n\r\nconst ViewFileActionModule = {\r\n moduleId: UI.Modules.VIEWED_FILES,\r\n};\r\n\r\nexport const ViewFileActionMenu = {\r\n moduleData: ViewFileActionModule,\r\n actions: ViewFileActions,\r\n};\r\n","import * as React from 'react';\r\n\r\nimport SessionLayout from 'routes/Sidebar/components/SessionLayout';\r\n\r\nimport ViewFileStore from 'stores/ViewFileStore';\r\nimport ViewFileAPIActions from 'actions/reflux/ViewFileActions';\r\n\r\nimport FileIcon from 'components/icon/FileIcon';\r\nimport Message from 'components/semantic/Message';\r\n\r\nimport FileSession from './FileSession';\r\n\r\nimport '../style.css';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport {\r\n SessionProviderDecoratorChildProps,\r\n SessionProviderDecorator,\r\n} from 'routes/Sidebar/decorators/SessionProviderDecorator';\r\nimport { ViewFileActionMenu } from 'actions/ui/viewed-file';\r\n\r\nconst ItemHandler: UI.SessionInfoGetter<API.ViewFile> = {\r\n itemNameGetter(session) {\r\n return session.name;\r\n },\r\n\r\n itemLabelGetter() {\r\n return null;\r\n },\r\n\r\n itemHeaderDescriptionGetter() {\r\n return null;\r\n },\r\n\r\n itemHeaderIconGetter(session) {\r\n return <FileIcon typeInfo={session.type} />;\r\n },\r\n};\r\n\r\nconst Files: React.FC<SessionProviderDecoratorChildProps<API.ViewFile>> = (props) => {\r\n const { params, sessionT, ...other } = props;\r\n if (props.items.length === 0) {\r\n return (\r\n <Message\r\n title={sessionT.t('noFiles', 'No files to view')}\r\n description={sessionT.t<string>(\r\n 'noFilesDesc',\r\n 'You may open text or media files to be viewed here from search or filelists',\r\n )}\r\n />\r\n );\r\n }\r\n\r\n return (\r\n <SessionLayout\r\n activeId={params.id}\r\n baseUrl=\"files\"\r\n disableSideMenu={true}\r\n editAccess={API.AccessEnum.VIEW_FILE_EDIT}\r\n uiActions={ViewFileActionMenu}\r\n sessionApi={ViewFileAPIActions as UI.SessionActions<API.ViewFile>}\r\n unreadInfoStore={ViewFileStore}\r\n sessionItemLayout={FileSession}\r\n sessionT={sessionT}\r\n remoteMenuId=\"view_file\"\r\n {...ItemHandler}\r\n {...other}\r\n />\r\n );\r\n};\r\n\r\nexport default SessionProviderDecorator(Files, ViewFileStore, UI.Modules.VIEWED_FILES);\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","Component","url","autoPlay","error","setError","mediaRef","current","load","mediaProps","onError","event","target","code","MEDIA_ERR_NETWORK","MEDIA_ERR_DECODE","MEDIA_ERR_SRC_NOT_SUPPORTED","formatMediaError","controls","src","AudioFileDecorated","MediaFileDecorator","ref","style","maxWidth","maxHeight","ImageFile","TextFile","textGetter","text","setText","useState","t","useEffect","then","catch","Message","title","COMMON","description","message","Loader","VideoFileDecorated","formatText","i18nKey","Row","className","titleWidth","noText","overflow","Header","Grid","children","columns","stackable","other","redrawIntervalSeconds","RedrawDecorator","scheduleComponentRefresh","this","redrawTimeout","window","setTimeout","forceUpdate","componentDidMount","componentWillUnmount","clearTimeout","render","props","item","sessionT","downloadState","download_state","SessionFooter","label","translate","time_finished","time_opened","useAutoPlay","diff","asMinutes","memo","session","scrollPositionHandler","scrollable","restoreScrollPosition","ViewerElement","data","onReady","type","content_type","getViewerElement","child","tth","getBasePath","LoginStore","authToken","mime_type","extension","str","FileSession","content_ready","ViewFileStore","scroll","icon","IconConstants","ERROR","ActiveSessionDecorator","A","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","remove","ViewFileConstants","SESSIONS_URL","VIEW_FILE_EDIT","ViewFileActionMenu","moduleData","moduleId","VIEWED_FILES","actions","ItemHandler","itemNameGetter","name","itemLabelGetter","itemHeaderDescriptionGetter","itemHeaderIconGetter","FileIcon","typeInfo","SessionProviderDecorator","params","items","length","SessionLayout","activeId","baseUrl","disableSideMenu","editAccess","uiActions","sessionApi","unreadInfoStore","sessionItemLayout","remoteMenuId"],"sourceRoot":""}
|