cozy-ui 111.20.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 (171) hide show
  1. package/CHANGELOG.md +21 -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/Skeletons/ListItemSkeleton.jsx +4 -3
  7. package/react/Skeletons/Readme.md +12 -3
  8. package/react/hooks/useClientErrors.jsx +140 -0
  9. package/react/hooks/useClientErrors.spec.jsx +102 -0
  10. package/react/index.js +0 -1
  11. package/transpiled/react/FileImageLoader/index.js +3 -3
  12. package/transpiled/react/Skeletons/ListItemSkeleton.js +7 -3
  13. package/transpiled/react/hooks/useClientErrors.js +167 -0
  14. package/transpiled/react/index.js +0 -1
  15. package/transpiled/react/stylesheet.css +1 -1
  16. package/react/Viewer/Footer/BottomSheetContent.jsx +0 -29
  17. package/react/Viewer/Footer/DownloadButton.jsx +0 -67
  18. package/react/Viewer/Footer/FooterActionButtons.jsx +0 -22
  19. package/react/Viewer/Footer/FooterActionButtons.spec.jsx +0 -30
  20. package/react/Viewer/Footer/FooterContent.jsx +0 -99
  21. package/react/Viewer/Footer/ForwardButton.jsx +0 -95
  22. package/react/Viewer/Footer/ForwardButton.spec.jsx +0 -87
  23. package/react/Viewer/Footer/ForwardOrDownloadButton.jsx +0 -24
  24. package/react/Viewer/Footer/Sharing.jsx +0 -60
  25. package/react/Viewer/Footer/helpers.js +0 -107
  26. package/react/Viewer/Footer/helpers.spec.js +0 -77
  27. package/react/Viewer/NoViewer/DownloadButton.jsx +0 -28
  28. package/react/Viewer/NoViewer/FileIcon.jsx +0 -46
  29. package/react/Viewer/NoViewer/NoViewer.jsx +0 -29
  30. package/react/Viewer/NoViewer/NoViewer.spec.jsx +0 -44
  31. package/react/Viewer/NoViewer/__snapshots__/NoViewer.spec.jsx.snap +0 -82
  32. package/react/Viewer/NoViewer/index.jsx +0 -1
  33. package/react/Viewer/Panel/ActionMenuDesktop.jsx +0 -66
  34. package/react/Viewer/Panel/ActionMenuMobile.jsx +0 -74
  35. package/react/Viewer/Panel/ActionMenuWrapper.jsx +0 -104
  36. package/react/Viewer/Panel/Certifications.jsx +0 -62
  37. package/react/Viewer/Panel/PanelContent.jsx +0 -49
  38. package/react/Viewer/Panel/Qualification.jsx +0 -114
  39. package/react/Viewer/Panel/QualificationListItemContact.jsx +0 -85
  40. package/react/Viewer/Panel/QualificationListItemDate.jsx +0 -77
  41. package/react/Viewer/Panel/QualificationListItemInformation.jsx +0 -68
  42. package/react/Viewer/Panel/QualificationListItemInformation.spec.jsx +0 -73
  43. package/react/Viewer/Panel/QualificationListItemOther.jsx +0 -61
  44. package/react/Viewer/Panel/QualificationListItemText.jsx +0 -30
  45. package/react/Viewer/Panel/getPanelBlocks.jsx +0 -56
  46. package/react/Viewer/Panel/getPanelBlocks.spec.jsx +0 -79
  47. package/react/Viewer/Panel/styles.styl +0 -13
  48. package/react/Viewer/Readme.md +0 -352
  49. package/react/Viewer/Viewer.jsx +0 -134
  50. package/react/Viewer/ViewerContainer.jsx +0 -169
  51. package/react/Viewer/ViewerExposer.js +0 -3
  52. package/react/Viewer/ViewerInformationsWrapper.jsx +0 -69
  53. package/react/Viewer/ViewerInformationsWrapper.spec.jsx +0 -63
  54. package/react/Viewer/ViewerWithCustomPanelAndFooter.jsx +0 -55
  55. package/react/Viewer/ViewersByFile/AudioViewer.jsx +0 -21
  56. package/react/Viewer/ViewersByFile/AudioViewer.spec.jsx +0 -39
  57. package/react/Viewer/ViewersByFile/BlankPaperViewer.jsx +0 -46
  58. package/react/Viewer/ViewersByFile/ImageViewer.jsx +0 -330
  59. package/react/Viewer/ViewersByFile/ImageViewer.spec.jsx +0 -70
  60. package/react/Viewer/ViewersByFile/NoNetworkViewer.jsx +0 -17
  61. package/react/Viewer/ViewersByFile/OnlyOfficeViewer.jsx +0 -28
  62. package/react/Viewer/ViewersByFile/PdfJsViewer.jsx +0 -210
  63. package/react/Viewer/ViewersByFile/PdfJsViewer.spec.jsx +0 -160
  64. package/react/Viewer/ViewersByFile/PdfMobileViewer.jsx +0 -106
  65. package/react/Viewer/ViewersByFile/PdfMobileViewer.spec.jsx +0 -76
  66. package/react/Viewer/ViewersByFile/ShortcutViewer.jsx +0 -38
  67. package/react/Viewer/ViewersByFile/ShortcutViewer.spec.jsx +0 -32
  68. package/react/Viewer/ViewersByFile/TextViewer.jsx +0 -126
  69. package/react/Viewer/ViewersByFile/TextViewer.spec.jsx +0 -118
  70. package/react/Viewer/ViewersByFile/VideoViewer.jsx +0 -13
  71. package/react/Viewer/ViewersByFile/VideoViewer.spec.jsx +0 -39
  72. package/react/Viewer/ViewersByFile/__snapshots__/AudioViewer.spec.jsx.snap +0 -43
  73. package/react/Viewer/ViewersByFile/__snapshots__/ShortcutViewer.spec.jsx.snap +0 -57
  74. package/react/Viewer/ViewersByFile/__snapshots__/TextViewer.spec.jsx.snap +0 -100
  75. package/react/Viewer/ViewersByFile/__snapshots__/VideoViewer.spec.jsx.snap +0 -19
  76. package/react/Viewer/ViewersByFile/styles.styl +0 -87
  77. package/react/Viewer/assets/IlluGenericNewPage.svg +0 -10
  78. package/react/Viewer/components/ExpirationAlert.jsx +0 -86
  79. package/react/Viewer/components/ExpirationAnnotation.jsx +0 -40
  80. package/react/Viewer/components/Footer.jsx +0 -13
  81. package/react/Viewer/components/InformationPanel.jsx +0 -26
  82. package/react/Viewer/components/Navigation.jsx +0 -39
  83. package/react/Viewer/components/PdfToolbarButton.jsx +0 -26
  84. package/react/Viewer/components/PrintButton.jsx +0 -90
  85. package/react/Viewer/components/Toolbar.jsx +0 -111
  86. package/react/Viewer/components/ToolbarButtons.jsx +0 -11
  87. package/react/Viewer/components/ToolbarFilePath.jsx +0 -61
  88. package/react/Viewer/components/ViewerByFile.jsx +0 -112
  89. package/react/Viewer/components/ViewerByFile.spec.jsx +0 -100
  90. package/react/Viewer/components/ViewerControls.jsx +0 -190
  91. package/react/Viewer/components/ViewerControls.spec.jsx +0 -54
  92. package/react/Viewer/components/ViewerSpinner.jsx +0 -17
  93. package/react/Viewer/components/styles.styl +0 -93
  94. package/react/Viewer/helpers.js +0 -131
  95. package/react/Viewer/helpers.spec.js +0 -136
  96. package/react/Viewer/hoc/withFileUrl.jsx +0 -93
  97. package/react/Viewer/hoc/withViewerLocales.jsx +0 -4
  98. package/react/Viewer/hooks/useReferencedContactName.jsx +0 -26
  99. package/react/Viewer/index.jsx +0 -12
  100. package/react/Viewer/locales/en.json +0 -66
  101. package/react/Viewer/locales/fr.json +0 -66
  102. package/react/Viewer/locales/index.js +0 -4
  103. package/react/Viewer/proptypes.js +0 -12
  104. package/react/Viewer/providers/ActionMenuProvider.jsx +0 -35
  105. package/react/Viewer/queries.js +0 -20
  106. package/react/Viewer/styles.styl +0 -22
  107. package/react/Viewer/vars.styl +0 -6
  108. package/transpiled/react/Viewer/Footer/BottomSheetContent.js +0 -28
  109. package/transpiled/react/Viewer/Footer/DownloadButton.js +0 -91
  110. package/transpiled/react/Viewer/Footer/FooterActionButtons.js +0 -21
  111. package/transpiled/react/Viewer/Footer/FooterContent.js +0 -98
  112. package/transpiled/react/Viewer/Footer/ForwardButton.js +0 -143
  113. package/transpiled/react/Viewer/Footer/ForwardOrDownloadButton.js +0 -25
  114. package/transpiled/react/Viewer/Footer/Sharing.js +0 -57
  115. package/transpiled/react/Viewer/Footer/helpers.js +0 -151
  116. package/transpiled/react/Viewer/NoViewer/DownloadButton.js +0 -34
  117. package/transpiled/react/Viewer/NoViewer/FileIcon.js +0 -57
  118. package/transpiled/react/Viewer/NoViewer/NoViewer.js +0 -49
  119. package/transpiled/react/Viewer/NoViewer/index.js +0 -1
  120. package/transpiled/react/Viewer/Panel/ActionMenuDesktop.js +0 -68
  121. package/transpiled/react/Viewer/Panel/ActionMenuMobile.js +0 -70
  122. package/transpiled/react/Viewer/Panel/ActionMenuWrapper.js +0 -129
  123. package/transpiled/react/Viewer/Panel/Certifications.js +0 -56
  124. package/transpiled/react/Viewer/Panel/PanelContent.js +0 -48
  125. package/transpiled/react/Viewer/Panel/Qualification.js +0 -119
  126. package/transpiled/react/Viewer/Panel/QualificationListItemContact.js +0 -96
  127. package/transpiled/react/Viewer/Panel/QualificationListItemDate.js +0 -64
  128. package/transpiled/react/Viewer/Panel/QualificationListItemInformation.js +0 -59
  129. package/transpiled/react/Viewer/Panel/QualificationListItemOther.js +0 -53
  130. package/transpiled/react/Viewer/Panel/QualificationListItemText.js +0 -29
  131. package/transpiled/react/Viewer/Panel/getPanelBlocks.js +0 -62
  132. package/transpiled/react/Viewer/Viewer.js +0 -172
  133. package/transpiled/react/Viewer/ViewerContainer.js +0 -189
  134. package/transpiled/react/Viewer/ViewerExposer.js +0 -2
  135. package/transpiled/react/Viewer/ViewerInformationsWrapper.js +0 -49
  136. package/transpiled/react/Viewer/ViewerWithCustomPanelAndFooter.js +0 -56
  137. package/transpiled/react/Viewer/ViewersByFile/AudioViewer.js +0 -41
  138. package/transpiled/react/Viewer/ViewersByFile/BlankPaperViewer.js +0 -74
  139. package/transpiled/react/Viewer/ViewersByFile/ImageViewer.js +0 -367
  140. package/transpiled/react/Viewer/ViewersByFile/NoNetworkViewer.js +0 -38
  141. package/transpiled/react/Viewer/ViewersByFile/OnlyOfficeViewer.js +0 -29
  142. package/transpiled/react/Viewer/ViewersByFile/PdfJsViewer.js +0 -254
  143. package/transpiled/react/Viewer/ViewersByFile/PdfMobileViewer.js +0 -153
  144. package/transpiled/react/Viewer/ViewersByFile/ShortcutViewer.js +0 -42
  145. package/transpiled/react/Viewer/ViewersByFile/TextViewer.js +0 -219
  146. package/transpiled/react/Viewer/ViewersByFile/VideoViewer.js +0 -33
  147. package/transpiled/react/Viewer/assets/IlluGenericNewPage.svg +0 -10
  148. package/transpiled/react/Viewer/components/ExpirationAlert.js +0 -100
  149. package/transpiled/react/Viewer/components/ExpirationAnnotation.js +0 -41
  150. package/transpiled/react/Viewer/components/Footer.js +0 -29
  151. package/transpiled/react/Viewer/components/InformationPanel.js +0 -23
  152. package/transpiled/react/Viewer/components/Navigation.js +0 -47
  153. package/transpiled/react/Viewer/components/PdfToolbarButton.js +0 -28
  154. package/transpiled/react/Viewer/components/PrintButton.js +0 -137
  155. package/transpiled/react/Viewer/components/Toolbar.js +0 -115
  156. package/transpiled/react/Viewer/components/ToolbarButtons.js +0 -9
  157. package/transpiled/react/Viewer/components/ToolbarFilePath.js +0 -71
  158. package/transpiled/react/Viewer/components/ViewerByFile.js +0 -105
  159. package/transpiled/react/Viewer/components/ViewerControls.js +0 -226
  160. package/transpiled/react/Viewer/components/ViewerSpinner.js +0 -17
  161. package/transpiled/react/Viewer/helpers.js +0 -147
  162. package/transpiled/react/Viewer/hoc/withFileUrl.js +0 -207
  163. package/transpiled/react/Viewer/hoc/withViewerLocales.js +0 -3
  164. package/transpiled/react/Viewer/hooks/useReferencedContactName.js +0 -32
  165. package/transpiled/react/Viewer/index.js +0 -11
  166. package/transpiled/react/Viewer/locales/index.js +0 -136
  167. package/transpiled/react/Viewer/proptypes.js +0 -14
  168. package/transpiled/react/Viewer/providers/ActionMenuProvider.js +0 -34
  169. package/transpiled/react/Viewer/queries.js +0 -26
  170. /package/react/{Viewer/providers/EncryptedProvider.jsx → providers/Encrypted/index.jsx} +0 -0
  171. /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
- }