cozy-ui 111.21.0 → 112.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/package.json +3 -2
  3. package/react/FileImageLoader/Readme.md +66 -3
  4. package/react/FileImageLoader/index.jsx +3 -3
  5. package/react/FileImageLoader/index.spec.jsx +1 -1
  6. package/react/hooks/useClientErrors.jsx +140 -0
  7. package/react/hooks/useClientErrors.spec.jsx +102 -0
  8. package/react/index.js +0 -1
  9. package/transpiled/react/FileImageLoader/index.js +3 -3
  10. package/transpiled/react/hooks/useClientErrors.js +167 -0
  11. package/transpiled/react/index.js +0 -1
  12. package/transpiled/react/stylesheet.css +1 -1
  13. package/react/Viewer/Footer/BottomSheetContent.jsx +0 -29
  14. package/react/Viewer/Footer/DownloadButton.jsx +0 -67
  15. package/react/Viewer/Footer/FooterActionButtons.jsx +0 -22
  16. package/react/Viewer/Footer/FooterActionButtons.spec.jsx +0 -30
  17. package/react/Viewer/Footer/FooterContent.jsx +0 -99
  18. package/react/Viewer/Footer/ForwardButton.jsx +0 -95
  19. package/react/Viewer/Footer/ForwardButton.spec.jsx +0 -87
  20. package/react/Viewer/Footer/ForwardOrDownloadButton.jsx +0 -24
  21. package/react/Viewer/Footer/Sharing.jsx +0 -60
  22. package/react/Viewer/Footer/helpers.js +0 -107
  23. package/react/Viewer/Footer/helpers.spec.js +0 -77
  24. package/react/Viewer/NoViewer/DownloadButton.jsx +0 -28
  25. package/react/Viewer/NoViewer/FileIcon.jsx +0 -46
  26. package/react/Viewer/NoViewer/NoViewer.jsx +0 -29
  27. package/react/Viewer/NoViewer/NoViewer.spec.jsx +0 -44
  28. package/react/Viewer/NoViewer/__snapshots__/NoViewer.spec.jsx.snap +0 -82
  29. package/react/Viewer/NoViewer/index.jsx +0 -1
  30. package/react/Viewer/Panel/ActionMenuDesktop.jsx +0 -66
  31. package/react/Viewer/Panel/ActionMenuMobile.jsx +0 -74
  32. package/react/Viewer/Panel/ActionMenuWrapper.jsx +0 -104
  33. package/react/Viewer/Panel/Certifications.jsx +0 -62
  34. package/react/Viewer/Panel/PanelContent.jsx +0 -49
  35. package/react/Viewer/Panel/Qualification.jsx +0 -114
  36. package/react/Viewer/Panel/QualificationListItemContact.jsx +0 -85
  37. package/react/Viewer/Panel/QualificationListItemDate.jsx +0 -77
  38. package/react/Viewer/Panel/QualificationListItemInformation.jsx +0 -68
  39. package/react/Viewer/Panel/QualificationListItemInformation.spec.jsx +0 -73
  40. package/react/Viewer/Panel/QualificationListItemOther.jsx +0 -61
  41. package/react/Viewer/Panel/QualificationListItemText.jsx +0 -30
  42. package/react/Viewer/Panel/getPanelBlocks.jsx +0 -56
  43. package/react/Viewer/Panel/getPanelBlocks.spec.jsx +0 -79
  44. package/react/Viewer/Panel/styles.styl +0 -13
  45. package/react/Viewer/Readme.md +0 -352
  46. package/react/Viewer/Viewer.jsx +0 -134
  47. package/react/Viewer/ViewerContainer.jsx +0 -169
  48. package/react/Viewer/ViewerExposer.js +0 -3
  49. package/react/Viewer/ViewerInformationsWrapper.jsx +0 -69
  50. package/react/Viewer/ViewerInformationsWrapper.spec.jsx +0 -63
  51. package/react/Viewer/ViewerWithCustomPanelAndFooter.jsx +0 -55
  52. package/react/Viewer/ViewersByFile/AudioViewer.jsx +0 -21
  53. package/react/Viewer/ViewersByFile/AudioViewer.spec.jsx +0 -39
  54. package/react/Viewer/ViewersByFile/BlankPaperViewer.jsx +0 -46
  55. package/react/Viewer/ViewersByFile/ImageViewer.jsx +0 -330
  56. package/react/Viewer/ViewersByFile/ImageViewer.spec.jsx +0 -70
  57. package/react/Viewer/ViewersByFile/NoNetworkViewer.jsx +0 -17
  58. package/react/Viewer/ViewersByFile/OnlyOfficeViewer.jsx +0 -28
  59. package/react/Viewer/ViewersByFile/PdfJsViewer.jsx +0 -210
  60. package/react/Viewer/ViewersByFile/PdfJsViewer.spec.jsx +0 -160
  61. package/react/Viewer/ViewersByFile/PdfMobileViewer.jsx +0 -106
  62. package/react/Viewer/ViewersByFile/PdfMobileViewer.spec.jsx +0 -76
  63. package/react/Viewer/ViewersByFile/ShortcutViewer.jsx +0 -38
  64. package/react/Viewer/ViewersByFile/ShortcutViewer.spec.jsx +0 -32
  65. package/react/Viewer/ViewersByFile/TextViewer.jsx +0 -126
  66. package/react/Viewer/ViewersByFile/TextViewer.spec.jsx +0 -118
  67. package/react/Viewer/ViewersByFile/VideoViewer.jsx +0 -13
  68. package/react/Viewer/ViewersByFile/VideoViewer.spec.jsx +0 -39
  69. package/react/Viewer/ViewersByFile/__snapshots__/AudioViewer.spec.jsx.snap +0 -43
  70. package/react/Viewer/ViewersByFile/__snapshots__/ShortcutViewer.spec.jsx.snap +0 -57
  71. package/react/Viewer/ViewersByFile/__snapshots__/TextViewer.spec.jsx.snap +0 -100
  72. package/react/Viewer/ViewersByFile/__snapshots__/VideoViewer.spec.jsx.snap +0 -19
  73. package/react/Viewer/ViewersByFile/styles.styl +0 -87
  74. package/react/Viewer/assets/IlluGenericNewPage.svg +0 -10
  75. package/react/Viewer/components/ExpirationAlert.jsx +0 -86
  76. package/react/Viewer/components/ExpirationAnnotation.jsx +0 -40
  77. package/react/Viewer/components/Footer.jsx +0 -13
  78. package/react/Viewer/components/InformationPanel.jsx +0 -26
  79. package/react/Viewer/components/Navigation.jsx +0 -39
  80. package/react/Viewer/components/PdfToolbarButton.jsx +0 -26
  81. package/react/Viewer/components/PrintButton.jsx +0 -90
  82. package/react/Viewer/components/Toolbar.jsx +0 -111
  83. package/react/Viewer/components/ToolbarButtons.jsx +0 -11
  84. package/react/Viewer/components/ToolbarFilePath.jsx +0 -61
  85. package/react/Viewer/components/ViewerByFile.jsx +0 -112
  86. package/react/Viewer/components/ViewerByFile.spec.jsx +0 -100
  87. package/react/Viewer/components/ViewerControls.jsx +0 -190
  88. package/react/Viewer/components/ViewerControls.spec.jsx +0 -54
  89. package/react/Viewer/components/ViewerSpinner.jsx +0 -17
  90. package/react/Viewer/components/styles.styl +0 -93
  91. package/react/Viewer/helpers.js +0 -131
  92. package/react/Viewer/helpers.spec.js +0 -136
  93. package/react/Viewer/hoc/withFileUrl.jsx +0 -93
  94. package/react/Viewer/hoc/withViewerLocales.jsx +0 -4
  95. package/react/Viewer/hooks/useReferencedContactName.jsx +0 -26
  96. package/react/Viewer/index.jsx +0 -12
  97. package/react/Viewer/locales/en.json +0 -66
  98. package/react/Viewer/locales/fr.json +0 -66
  99. package/react/Viewer/locales/index.js +0 -4
  100. package/react/Viewer/proptypes.js +0 -12
  101. package/react/Viewer/providers/ActionMenuProvider.jsx +0 -35
  102. package/react/Viewer/queries.js +0 -20
  103. package/react/Viewer/styles.styl +0 -22
  104. package/react/Viewer/vars.styl +0 -6
  105. package/transpiled/react/Viewer/Footer/BottomSheetContent.js +0 -28
  106. package/transpiled/react/Viewer/Footer/DownloadButton.js +0 -91
  107. package/transpiled/react/Viewer/Footer/FooterActionButtons.js +0 -21
  108. package/transpiled/react/Viewer/Footer/FooterContent.js +0 -98
  109. package/transpiled/react/Viewer/Footer/ForwardButton.js +0 -143
  110. package/transpiled/react/Viewer/Footer/ForwardOrDownloadButton.js +0 -25
  111. package/transpiled/react/Viewer/Footer/Sharing.js +0 -57
  112. package/transpiled/react/Viewer/Footer/helpers.js +0 -151
  113. package/transpiled/react/Viewer/NoViewer/DownloadButton.js +0 -34
  114. package/transpiled/react/Viewer/NoViewer/FileIcon.js +0 -57
  115. package/transpiled/react/Viewer/NoViewer/NoViewer.js +0 -49
  116. package/transpiled/react/Viewer/NoViewer/index.js +0 -1
  117. package/transpiled/react/Viewer/Panel/ActionMenuDesktop.js +0 -68
  118. package/transpiled/react/Viewer/Panel/ActionMenuMobile.js +0 -70
  119. package/transpiled/react/Viewer/Panel/ActionMenuWrapper.js +0 -129
  120. package/transpiled/react/Viewer/Panel/Certifications.js +0 -56
  121. package/transpiled/react/Viewer/Panel/PanelContent.js +0 -48
  122. package/transpiled/react/Viewer/Panel/Qualification.js +0 -119
  123. package/transpiled/react/Viewer/Panel/QualificationListItemContact.js +0 -96
  124. package/transpiled/react/Viewer/Panel/QualificationListItemDate.js +0 -64
  125. package/transpiled/react/Viewer/Panel/QualificationListItemInformation.js +0 -59
  126. package/transpiled/react/Viewer/Panel/QualificationListItemOther.js +0 -53
  127. package/transpiled/react/Viewer/Panel/QualificationListItemText.js +0 -29
  128. package/transpiled/react/Viewer/Panel/getPanelBlocks.js +0 -62
  129. package/transpiled/react/Viewer/Viewer.js +0 -172
  130. package/transpiled/react/Viewer/ViewerContainer.js +0 -189
  131. package/transpiled/react/Viewer/ViewerExposer.js +0 -2
  132. package/transpiled/react/Viewer/ViewerInformationsWrapper.js +0 -49
  133. package/transpiled/react/Viewer/ViewerWithCustomPanelAndFooter.js +0 -56
  134. package/transpiled/react/Viewer/ViewersByFile/AudioViewer.js +0 -41
  135. package/transpiled/react/Viewer/ViewersByFile/BlankPaperViewer.js +0 -74
  136. package/transpiled/react/Viewer/ViewersByFile/ImageViewer.js +0 -367
  137. package/transpiled/react/Viewer/ViewersByFile/NoNetworkViewer.js +0 -38
  138. package/transpiled/react/Viewer/ViewersByFile/OnlyOfficeViewer.js +0 -29
  139. package/transpiled/react/Viewer/ViewersByFile/PdfJsViewer.js +0 -254
  140. package/transpiled/react/Viewer/ViewersByFile/PdfMobileViewer.js +0 -153
  141. package/transpiled/react/Viewer/ViewersByFile/ShortcutViewer.js +0 -42
  142. package/transpiled/react/Viewer/ViewersByFile/TextViewer.js +0 -219
  143. package/transpiled/react/Viewer/ViewersByFile/VideoViewer.js +0 -33
  144. package/transpiled/react/Viewer/assets/IlluGenericNewPage.svg +0 -10
  145. package/transpiled/react/Viewer/components/ExpirationAlert.js +0 -100
  146. package/transpiled/react/Viewer/components/ExpirationAnnotation.js +0 -41
  147. package/transpiled/react/Viewer/components/Footer.js +0 -29
  148. package/transpiled/react/Viewer/components/InformationPanel.js +0 -23
  149. package/transpiled/react/Viewer/components/Navigation.js +0 -47
  150. package/transpiled/react/Viewer/components/PdfToolbarButton.js +0 -28
  151. package/transpiled/react/Viewer/components/PrintButton.js +0 -137
  152. package/transpiled/react/Viewer/components/Toolbar.js +0 -115
  153. package/transpiled/react/Viewer/components/ToolbarButtons.js +0 -9
  154. package/transpiled/react/Viewer/components/ToolbarFilePath.js +0 -71
  155. package/transpiled/react/Viewer/components/ViewerByFile.js +0 -105
  156. package/transpiled/react/Viewer/components/ViewerControls.js +0 -226
  157. package/transpiled/react/Viewer/components/ViewerSpinner.js +0 -17
  158. package/transpiled/react/Viewer/helpers.js +0 -147
  159. package/transpiled/react/Viewer/hoc/withFileUrl.js +0 -207
  160. package/transpiled/react/Viewer/hoc/withViewerLocales.js +0 -3
  161. package/transpiled/react/Viewer/hooks/useReferencedContactName.js +0 -32
  162. package/transpiled/react/Viewer/index.js +0 -11
  163. package/transpiled/react/Viewer/locales/index.js +0 -136
  164. package/transpiled/react/Viewer/proptypes.js +0 -14
  165. package/transpiled/react/Viewer/providers/ActionMenuProvider.js +0 -34
  166. package/transpiled/react/Viewer/queries.js +0 -26
  167. /package/react/{Viewer/providers/EncryptedProvider.jsx → providers/Encrypted/index.jsx} +0 -0
  168. /package/transpiled/react/{Viewer/providers/EncryptedProvider.js → providers/Encrypted/index.js} +0 -0
@@ -1,100 +0,0 @@
1
- import { isMobile as isMobileDevice } from 'cozy-device-helper'
2
-
3
- import { getViewerComponentName } from './ViewerByFile'
4
-
5
- jest.mock('cozy-device-helper', () => ({
6
- ...jest.requireActual('cozy-device-helper'),
7
- isMobile: jest.fn()
8
- }))
9
- jest.mock('../ViewersByFile/ShortcutViewer', () => 'ShortcutViewer')
10
- jest.mock('../ViewersByFile/ImageViewer', () => 'ImageViewer')
11
- jest.mock('../ViewersByFile/AudioViewer', () => 'AudioViewer')
12
- jest.mock('../ViewersByFile/AudioViewer', () => 'AudioViewer')
13
- jest.mock('../ViewersByFile/VideoViewer', () => 'VideoViewer')
14
- jest.mock('../ViewersByFile/PdfJsViewer', () => 'PdfJsViewer')
15
- jest.mock('../ViewersByFile/PdfMobileViewer', () => 'PdfMobileViewer')
16
- jest.mock('../ViewersByFile/TextViewer', () => 'TextViewer')
17
- jest.mock('../ViewersByFile/OnlyOfficeViewer', () => 'OnlyOfficeViewer')
18
- jest.mock('../NoViewer', () => 'NoViewer')
19
-
20
- describe('getViewerComponentName', () => {
21
- beforeEach(() => {
22
- isMobileDevice.mockReturnValue(false)
23
- })
24
-
25
- it('should return the correct component', () => {
26
- expect(getViewerComponentName({ file: { class: 'shortcut' } })).toBe(
27
- 'ShortcutViewer'
28
- )
29
- expect(getViewerComponentName({ file: { class: 'image' } })).toBe(
30
- 'ImageViewer'
31
- )
32
- expect(getViewerComponentName({ file: { class: 'audio' } })).toBe(
33
- 'AudioViewer'
34
- )
35
- expect(getViewerComponentName({ file: { class: 'video' } })).toBe(
36
- 'VideoViewer'
37
- )
38
- isMobileDevice.mockReturnValue(true)
39
- expect(getViewerComponentName({ file: { class: 'video' } })).toBe(
40
- 'NoViewer'
41
- )
42
- isMobileDevice.mockReturnValue(false)
43
- expect(
44
- getViewerComponentName({ file: { class: 'pdf' }, isDesktop: false })
45
- ).toBe('PdfMobileViewer')
46
- expect(
47
- getViewerComponentName({ file: { class: 'pdf' }, isDesktop: true })
48
- ).toBe('PdfJsViewer')
49
- expect(
50
- getViewerComponentName({
51
- file: {
52
- class: 'text',
53
- mime: 'text/plain',
54
- name: 'test.txt'
55
- }
56
- })
57
- ).toBe('TextViewer')
58
- expect(
59
- getViewerComponentName({
60
- file: { class: 'text', name: 'test.docx' },
61
- isOnlyOfficeEnabled: true
62
- })
63
- ).toBe('OnlyOfficeViewer')
64
- expect(
65
- getViewerComponentName({
66
- file: { class: 'text', name: 'test.docx' },
67
- isOnlyOfficeEnabled: false
68
- })
69
- ).toBe('NoViewer')
70
- expect(
71
- getViewerComponentName({
72
- file: { class: 'slide' },
73
- isOnlyOfficeEnabled: true
74
- })
75
- ).toBe('OnlyOfficeViewer')
76
- expect(
77
- getViewerComponentName({
78
- file: { class: 'slide' },
79
- isOnlyOfficeEnabled: false
80
- })
81
- ).toBe('NoViewer')
82
- expect(
83
- getViewerComponentName({
84
- file: { class: 'spreadsheet' },
85
- isOnlyOfficeEnabled: true
86
- })
87
- ).toBe('OnlyOfficeViewer')
88
- expect(
89
- getViewerComponentName({
90
- file: { class: 'spreadsheet' },
91
- isOnlyOfficeEnabled: false
92
- })
93
- ).toBe('NoViewer')
94
- expect(
95
- getViewerComponentName({
96
- file: { class: 'notSupportedClass' }
97
- })
98
- ).toBe('NoViewer')
99
- })
100
- })
@@ -1,190 +0,0 @@
1
- import cx from 'classnames'
2
- import Hammer from 'hammerjs'
3
- import flow from 'lodash/flow'
4
- import PropTypes from 'prop-types'
5
- import React, { Component } from 'react'
6
-
7
- import { infoWidth } from './InformationPanel'
8
- import Navigation from './Navigation'
9
- import Toolbar from './Toolbar'
10
- import styles from './styles.styl'
11
- import { toolbarPropsPropType } from '..'
12
- import withBreakpoints from '../../helpers/withBreakpoints'
13
- import { withStyles } from '../../styles'
14
- import { isValidForPanel } from '../helpers'
15
-
16
- const ACTIONS_HIDE_DELAY = 3000
17
-
18
- const customStyles = () => ({
19
- viewerControlsWithInfo: {
20
- width: `calc(100% - ${infoWidth}) !important`
21
- }
22
- })
23
-
24
- class ViewerControls extends Component {
25
- state = {
26
- hidden: false,
27
- gestures: null
28
- }
29
-
30
- _mounted = false
31
-
32
- showControls = () => {
33
- if (this._mounted) {
34
- this.setState({ hidden: false })
35
- this.hideAfterDelay()
36
- document.removeEventListener('mousemove', this.showControls)
37
- document.addEventListener('mousemove', this.hideAfterDelay)
38
- }
39
- }
40
-
41
- hideControls = () => {
42
- if (this._mounted) {
43
- this.setState({ hidden: true })
44
- document.removeEventListener('mousemove', this.hideAfterDelay)
45
- document.addEventListener('mousemove', this.showControls)
46
- }
47
- }
48
-
49
- hideAfterDelay = () => {
50
- clearTimeout(this.hideTimeout)
51
- this.hideTimeout = setTimeout(() => {
52
- this.hideControls()
53
- }, ACTIONS_HIDE_DELAY)
54
- }
55
-
56
- onSwipe = e => {
57
- if (e.direction === Hammer.DIRECTION_LEFT) this.props.onNext()
58
- else if (e.direction === Hammer.DIRECTION_RIGHT) this.props.onPrevious()
59
- }
60
-
61
- initGestures = () => {
62
- const gestures = new Hammer(
63
- this.wrapped,
64
- this.props.breakpoints.isDesktop
65
- ? {
66
- cssProps: {
67
- userSelect: 'auto'
68
- }
69
- }
70
- : {}
71
- )
72
- if (!this.props.breakpoints.isDesktop) gestures.on('swipe', this.onSwipe)
73
-
74
- return gestures
75
- }
76
-
77
- componentDidMount() {
78
- this._mounted = true
79
- clearTimeout(this.hideTimeout)
80
- this.hideAfterDelay()
81
- const gestures = this.initGestures()
82
- this.setState({ gestures })
83
- }
84
-
85
- componentWillUnmount() {
86
- this._mounted = false
87
- clearTimeout(this.hideTimeout)
88
- if (this.state.gestures) this.state.gestures.destroy()
89
- }
90
-
91
- renderChildren(children) {
92
- if (!children) return null
93
-
94
- return React.Children.map(children, child => {
95
- if (
96
- child?.type?.name === 'ViewerByFile' ||
97
- child?.type?.displayName === 'ViewerByFile'
98
- ) {
99
- return React.cloneElement(child, {
100
- gestures: this.state.gestures,
101
- gesturesRef: this.wrapped,
102
- onSwipe: this.onSwipe
103
- })
104
- }
105
- })
106
- }
107
-
108
- render() {
109
- const {
110
- file,
111
- onClose,
112
- hasPrevious,
113
- hasNext,
114
- onPrevious,
115
- onNext,
116
- expanded,
117
- toolbarProps,
118
- showNavigation,
119
- showInfoPanel,
120
- children,
121
- classes,
122
- breakpoints: { isDesktop }
123
- } = this.props
124
- const { showToolbar, showClose, toolbarRef, showFilePath } = toolbarProps
125
- const { hidden } = this.state
126
-
127
- const shouldDisplayContentTop = isValidForPanel({ file })
128
-
129
- return (
130
- <div
131
- className={cx(styles['viewer-controls'], {
132
- [styles['viewer-controls--expanded']]: expanded,
133
- [styles['viewer-controls--display-content-top']]:
134
- shouldDisplayContentTop,
135
- [classes.viewerControlsWithInfo]: showInfoPanel
136
- })}
137
- ref={wrapped => {
138
- this.wrapped = wrapped
139
- }}
140
- >
141
- {showToolbar && (
142
- <Toolbar
143
- toolbarRef={toolbarRef}
144
- file={file}
145
- showFilePath={showFilePath}
146
- onMouseEnter={this.showControls}
147
- onMouseLeave={this.hideControls}
148
- onClose={showClose && onClose}
149
- >
150
- {children}
151
- </Toolbar>
152
- )}
153
- {showNavigation && isDesktop && hasPrevious && (
154
- <Navigation
155
- className={styles['viewer-nav--previous']}
156
- hidden={hidden}
157
- onMouseEnter={this.showControls}
158
- onMouseLeave={this.hideControls}
159
- onClick={onPrevious}
160
- />
161
- )}
162
- {this.renderChildren(children)}
163
- {showNavigation && isDesktop && hasNext && (
164
- <Navigation
165
- className={styles['viewer-nav--next']}
166
- hidden={hidden}
167
- onMouseEnter={this.showControls}
168
- onMouseLeave={this.hideControls}
169
- onClick={onNext}
170
- />
171
- )}
172
- </div>
173
- )
174
- }
175
- }
176
-
177
- ViewerControls.propTypes = {
178
- file: PropTypes.object.isRequired,
179
- onClose: PropTypes.func.isRequired,
180
- hasPrevious: PropTypes.bool.isRequired,
181
- hasNext: PropTypes.bool.isRequired,
182
- onPrevious: PropTypes.func.isRequired,
183
- onNext: PropTypes.func.isRequired,
184
- expanded: PropTypes.bool.isRequired,
185
- toolbarProps: PropTypes.shape(toolbarPropsPropType),
186
- showNavigation: PropTypes.bool.isRequired,
187
- showInfoPanel: PropTypes.bool
188
- }
189
-
190
- export default flow(withBreakpoints(), withStyles(customStyles))(ViewerControls)
@@ -1,54 +0,0 @@
1
- import { render, screen } from '@testing-library/react'
2
- import React from 'react'
3
-
4
- import ViewerByFile from './ViewerByFile'
5
- import ViewerControls from './ViewerControls'
6
-
7
- jest.mock('../ViewersByFile/AudioViewer', () => () => <div>AudioViewer</div>)
8
- jest.mock('../providers/EncryptedProvider', () => ({
9
- useEncrypted: () => ({ url: 'random' })
10
- }))
11
-
12
- describe('ViewerControls', () => {
13
- const file = {
14
- _id: 'audio',
15
- class: 'audio',
16
- mime: 'audio/mp3',
17
- name: 'sample.mp3'
18
- }
19
-
20
- const setup = ({ children } = {}) => {
21
- render(
22
- <ViewerControls
23
- file={file}
24
- onClose={() => {}}
25
- hasPrevious={false}
26
- hasNext={false}
27
- onPrevious={() => {}}
28
- onNext={() => {}}
29
- expanded={false}
30
- toolbarProps={{
31
- showToolbar: false,
32
- showClose: false,
33
- showFilePath: false,
34
- toolbarRef: undefined
35
- }}
36
- showNavigation={false}
37
- >
38
- {children}
39
- </ViewerControls>
40
- )
41
- }
42
-
43
- it('should only render children if they are ViewerByFile', () => {
44
- setup({
45
- children: [
46
- undefined,
47
- <div key="notViewer">not ViewerByFile</div>,
48
- <ViewerByFile key="viewer" file={file} onClose={() => {}} />
49
- ]
50
- })
51
- expect(screen.queryByText('not ViewerByFile')).not.toBeInTheDocument()
52
- expect(screen.getByText('AudioViewer')).toBeInTheDocument()
53
- })
54
- })
@@ -1,17 +0,0 @@
1
- import React from 'react'
2
-
3
- import Spinner from '../../Spinner'
4
- import withBreakpoints from '../../helpers/withBreakpoints'
5
-
6
- const ViewerSpinner = ({ breakpoints: { isDesktop } }) => {
7
- return (
8
- <Spinner
9
- size="xxlarge"
10
- middle
11
- noMargin
12
- {...(isDesktop && { color: 'white' })}
13
- />
14
- )
15
- }
16
-
17
- export default withBreakpoints()(ViewerSpinner)
@@ -1,93 +0,0 @@
1
- @require 'components/selectionbar.styl'
2
- @require 'settings/breakpoints.styl'
3
-
4
- @require '../vars.styl'
5
-
6
- .viewer-nav
7
- position absolute
8
- top $toolbarHeight
9
- bottom 0
10
- z-index var(--zIndex-modal-toolbar)
11
- width 20%
12
- cursor pointer
13
- background-color transparent
14
- transition .4s opacity ease-out
15
- opacity 0
16
- display flex
17
- align-items center
18
- justify-content center
19
- flex-direction column
20
-
21
- &--visible:hover
22
- opacity 1
23
- transition none
24
-
25
- &--previous
26
- left 0
27
- .viewer-nav-arrow
28
- align-self flex-start
29
- margin-left 2.5rem
30
- transform rotate(180deg)
31
-
32
- &--next
33
- right 0
34
- .viewer-nav-arrow
35
- align-self flex-end
36
- margin-right 2.5rem
37
-
38
- +medium-screen()
39
- display none
40
-
41
- .viewer-nav-arrow
42
- opacity .7
43
-
44
- .viewer-controls
45
- position relative
46
- display flex
47
- flex-direction column
48
- justify-content center
49
- align-items center
50
- width 100%
51
- height 100%
52
-
53
- .viewer-controls.--expanded .viewer-nav
54
- margin-top 0
55
- width 40%
56
-
57
- .viewer-controls--display-content-top
58
- +medium-screen()
59
- justify-content flex-start
60
- padding-top $toolbarHeightMedium - $viewerMarginTopMedium + 1rem
61
-
62
- .viewer-toolbar
63
- position absolute
64
- top 0
65
- z-index var(--zIndex-modal-toolbar)
66
- display flex
67
- flex-shrink 0
68
- width calc(100% - 1rem)
69
- padding 0 0.5rem
70
- height $toolbarHeight
71
- transition .4s opacity ease-out
72
- background linear-gradient(to bottom, var(--charcoalGrey), rgba(50, 54, 63, 0))
73
- justify-content flex-start
74
- align-items center
75
-
76
- &--hidden
77
- opacity 0
78
-
79
- +medium-screen()
80
- height $toolbarHeightMedium
81
- width 100%
82
- padding var(--flagship-top-height) 1rem 0 0
83
- background var(--paperBackgroundColor)
84
- border-bottom 1px solid var(--dividerColor)
85
-
86
- .viewer-footer
87
- position fixed
88
- bottom 0
89
- z-index var(--zIndex-modal-footer)
90
- width 100%
91
- height $footerHeight
92
- padding-bottom var(--flagship-bottom-height, env(safe-area-inset-bottom))
93
- background var(--paperBackgroundColor)
@@ -1,131 +0,0 @@
1
- import { generateWebLink } from 'cozy-client'
2
- import {
3
- isEncrypted,
4
- isFromKonnector,
5
- hasQualifications,
6
- hasCertifications,
7
- normalize
8
- } from 'cozy-client/dist/models/file'
9
- import {
10
- KNOWN_DATE_METADATA_NAMES,
11
- KNOWN_INFORMATION_METADATA_NAMES,
12
- KNOWN_BILLS_ATTRIBUTES_NAMES
13
- } from 'cozy-client/dist/models/paper'
14
-
15
- export const getCurrentModel = metadataName => {
16
- if (
17
- KNOWN_DATE_METADATA_NAMES.includes(metadataName) ||
18
- KNOWN_INFORMATION_METADATA_NAMES.includes(metadataName) ||
19
- KNOWN_BILLS_ATTRIBUTES_NAMES.includes(metadataName)
20
- ) {
21
- return 'information'
22
- }
23
- if (metadataName === 'contact') return 'contact'
24
- if (metadataName === 'page') return 'page'
25
- }
26
-
27
- /**
28
- * @typedef {object} Reference
29
- * @property {string} id - id of the document
30
- * @property {string} type - doctype of the document
31
- */
32
-
33
- /**
34
- * Checks if the file matches one of the following conditions:
35
- * - Is certified
36
- * - Is Qualified
37
- * - From a Connector
38
- *
39
- * @param {object} param
40
- * @param {IOCozyFile} param.file
41
- * @returns {boolean}
42
- */
43
- export const isValidForPanel = ({ file }) => {
44
- return (
45
- hasCertifications(file) || hasQualifications(file) || isFromKonnector(file)
46
- )
47
- }
48
-
49
- export const downloadFile = async ({ client, file, url }) => {
50
- if (isEncrypted(file)) {
51
- return client.collection('io.cozy.files').forceFileDownload(url, file.name)
52
- }
53
- return client.collection('io.cozy.files').download(file)
54
- }
55
-
56
- export const isFileEncrypted = file => isEncrypted(file)
57
-
58
- export const formatDate = ({ f, lang, date }) => {
59
- if (lang === 'en') {
60
- return f(date, 'MM/DD/YYYY')
61
- }
62
- return f(date, 'DD/MM/YYYY')
63
- }
64
-
65
- /**
66
- * @param {{ information: string, page: string }} editPathByModelProps
67
- * @param {string} currentModel
68
- * @param {string} name
69
- * @returns {string}
70
- */
71
- export const buildEditAttributePath = (
72
- editPathByModelProps,
73
- currentModel,
74
- name
75
- ) => {
76
- const currentPath = editPathByModelProps[currentModel]
77
- return currentPath?.replace(/__NAME__/, name) ?? ''
78
- }
79
-
80
- export const isEditableAttribute = (name, file) => {
81
- const isNotEditableAttributes = ['datetime', 'qualification']
82
-
83
- return (
84
- !isNotEditableAttributes.includes(name) &&
85
- ((name === 'issueDate' && !isFromKonnector(file)) || name !== 'issueDate')
86
- )
87
- }
88
-
89
- export const normalizeAndSpreadAttributes = rawFile => {
90
- const normalizedFile = normalize(rawFile)
91
-
92
- return {
93
- ...normalizedFile,
94
- ...normalizedFile?.attributes
95
- }
96
- }
97
-
98
- /**
99
- * Return a web link to an application in the Cozy environment with the specified path
100
- * @param {object} param
101
- * @param {CozyClient} param.client - Instance of CozyClient
102
- * @param {string} param.slug - Slug of the application
103
- * @param {string} param.path - Path into the application
104
- * @returns {string} web link
105
- */
106
- export const makeWebLink = ({ client, slug, path }) => {
107
- try {
108
- const cozyURL = new URL(client.getStackClient().uri)
109
- const { subdomain: subDomainType } = client.getInstanceOptions()
110
-
111
- return generateWebLink({
112
- pathname: '/',
113
- cozyUrl: cozyURL.origin,
114
- slug,
115
- hash: path,
116
- subDomainType
117
- })
118
- } catch (e) {
119
- return null
120
- }
121
- }
122
-
123
- /**
124
- * Remove the file name at the end of a path
125
- * @param {string} path
126
- * @returns {string} new path
127
- */
128
- export const removeFilenameFromPath = path => {
129
- const newPath = path.substring(0, path.lastIndexOf('/'))
130
- return newPath === '' ? '/' : newPath
131
- }