apm-react-audio-player 1.0.2 → 1.0.4

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 (2) hide show
  1. package/dist/index.js +126 -22
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7,6 +7,35 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
7
7
  var React = require('react');
8
8
  var React__default = _interopDefault(React);
9
9
 
10
+ var Play = function Play() {
11
+ return /*#__PURE__*/React__default.createElement("svg", {
12
+ stroke: "currentColor",
13
+ fill: "currentColor",
14
+ strokeWidth: "0",
15
+ viewBox: "0 0 448 512",
16
+ className: "play",
17
+ height: "1em",
18
+ width: "1em",
19
+ xmlns: "http://www.w3.org/2000/svg"
20
+ }, /*#__PURE__*/React__default.createElement("path", {
21
+ d: "M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"
22
+ }));
23
+ };
24
+
25
+ var Pause = function Pause() {
26
+ return /*#__PURE__*/React__default.createElement("svg", {
27
+ stroke: "currentColor",
28
+ fill: "currentColor",
29
+ strokeWidth: "0",
30
+ viewBox: "0 0 448 512",
31
+ height: "1em",
32
+ width: "1em",
33
+ xmlns: "http://www.w3.org/2000/svg"
34
+ }, /*#__PURE__*/React__default.createElement("path", {
35
+ d: "M144 479H48c-26.5 0-48-21.5-48-48V79c0-26.5 21.5-48 48-48h96c26.5 0 48 21.5 48 48v352c0 26.5-21.5 48-48 48zm304-48V79c0-26.5-21.5-48-48-48h-96c-26.5 0-48 21.5-48 48v352c0 26.5 21.5 48 48 48h96c26.5 0 48-21.5 48-48z"
36
+ }));
37
+ };
38
+
10
39
  function _iterableToArrayLimit(arr, i) {
11
40
  var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"];
12
41
  if (null != _i) {
@@ -57,7 +86,7 @@ function _nonIterableRest() {
57
86
  throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
58
87
  }
59
88
 
60
- var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
89
+ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef, volumeCtrl) {
61
90
  var _useState = React.useState(false),
62
91
  _useState2 = _slicedToArray(_useState, 2),
63
92
  isPlaying = _useState2[0],
@@ -70,12 +99,18 @@ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
70
99
  _useState6 = _slicedToArray(_useState5, 2),
71
100
  currentTime = _useState6[0],
72
101
  setCurrentTime = _useState6[1];
102
+ var _useState7 = React.useState(false),
103
+ _useState8 = _slicedToArray(_useState7, 2),
104
+ isFinishedPlaying = _useState8[0],
105
+ setIsFinishedPlaying = _useState8[1];
73
106
  var animationRef = React.useRef(); // reference the animation
74
107
 
75
108
  var onLoadedMetadata = function onLoadedMetadata() {
76
109
  var seconds = Math.floor(audioRef.current.duration);
77
110
  setDuration(seconds);
78
- progressBarRef.current.max = seconds;
111
+ if (!audioRef.current.currentSrc.includes('stream')) {
112
+ progressBarRef.current.max = seconds;
113
+ }
79
114
  };
80
115
  var updateCurrentTime = function updateCurrentTime() {
81
116
  setCurrentTime(progressBarRef.current.value);
@@ -88,11 +123,13 @@ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
88
123
  // when you reach the end of the song
89
124
  if (progressBarRef.current.value === duration) {
90
125
  restart();
126
+ setIsFinishedPlaying(true);
91
127
  return;
92
128
  }
93
129
  animationRef.current = window.requestAnimationFrame(whilePlaying);
94
130
  };
95
131
  var pause = function pause() {
132
+ setIsPlaying(false);
96
133
  audioRef.current.pause();
97
134
  window.cancelAnimationFrame(animationRef.current);
98
135
  };
@@ -102,6 +139,7 @@ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
102
139
  pause();
103
140
  };
104
141
  var play = function play() {
142
+ setIsPlaying(true);
105
143
  audioRef.current.play();
106
144
  animationRef.current = window.requestAnimationFrame(whilePlaying);
107
145
  };
@@ -113,9 +151,7 @@ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
113
151
  return "".concat(returnedMinutes, ":").concat(returnedSeconds);
114
152
  };
115
153
  var togglePlaying = function togglePlaying() {
116
- var prevState = isPlaying;
117
- setIsPlaying(!prevState);
118
- if (!prevState) {
154
+ if (!isPlaying) {
119
155
  play();
120
156
  } else {
121
157
  pause();
@@ -137,6 +173,11 @@ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
137
173
  var forwardThirty = function forwardThirty() {
138
174
  timeTravel(Number(progressBarRef.current.value) + 30);
139
175
  };
176
+ var volumeControl = function volumeControl(e) {
177
+ var value = e.target.value;
178
+ var volume = value / 100;
179
+ audioRef.current.volume = volume;
180
+ };
140
181
  return {
141
182
  onLoadedMetadata: onLoadedMetadata,
142
183
  calculateTime: calculateTime,
@@ -145,50 +186,113 @@ var useAudioPlayer = function useAudioPlayer(audioRef, progressBarRef) {
145
186
  backThirty: backThirty,
146
187
  forwardThirty: forwardThirty,
147
188
  isPlaying: isPlaying,
189
+ isFinished: isFinishedPlaying,
148
190
  currentTime: currentTime,
149
- duration: duration
191
+ duration: duration,
192
+ volumeCtrl: volumeCtrl,
193
+ volumeControl: volumeControl
150
194
  };
151
195
  };
152
196
 
153
197
  var ReactAudioPlayer = function ReactAudioPlayer(props) {
198
+ var _props$audioPlayerRef, _props$progressBarRef;
154
199
  // references
155
- var audioPlayer = React.useRef(); // reference our audio component
156
- var progressBar = React.useRef(); // reference our progress bar
200
+ var audioPlayerRef = (_props$audioPlayerRef = props.audioPlayerRef) !== null && _props$audioPlayerRef !== void 0 ? _props$audioPlayerRef : React.useRef(); // reference our audio component
201
+ var progressBarRef = (_props$progressBarRef = props.progressBarRef) !== null && _props$progressBarRef !== void 0 ? _props$progressBarRef : React.useRef(); // reference our progress bar
157
202
 
158
203
  var customStyles = props ? props.style : '';
159
204
  var title = props.title,
160
205
  description = props.description,
161
- audioSrc = props.audioSrc;
206
+ audioSrc = props.audioSrc,
207
+ volumeCtrl = props.volumeCtrl,
208
+ playBtnClass = props.playBtnClass,
209
+ customHtml = props.customHtml,
210
+ customProps = props.customProps,
211
+ isLive = props.isLive;
162
212
 
163
213
  // hooks
164
- var _useAudioPlayer = useAudioPlayer(audioPlayer, progressBar),
214
+ var _useAudioPlayer = useAudioPlayer(audioPlayerRef, progressBarRef),
215
+ onLoadedMetadata = _useAudioPlayer.onLoadedMetadata,
165
216
  calculateTime = _useAudioPlayer.calculateTime,
217
+ togglePlaying = _useAudioPlayer.togglePlaying,
166
218
  changePlayerCurrentTime = _useAudioPlayer.changePlayerCurrentTime,
219
+ isPlaying = _useAudioPlayer.isPlaying,
167
220
  currentTime = _useAudioPlayer.currentTime,
168
- duration = _useAudioPlayer.duration;
221
+ duration = _useAudioPlayer.duration,
222
+ volumeControl = _useAudioPlayer.volumeControl;
169
223
  return audioSrc && /*#__PURE__*/React__default.createElement("div", {
170
224
  className: "audioPlayer",
171
225
  style: customStyles && customStyles.audioPlayer
172
- }, "hi", /*#__PURE__*/React__default.createElement("div", {
173
- className: "currentTime"
226
+ }, /*#__PURE__*/React__default.createElement("audio", {
227
+ ref: audioPlayerRef,
228
+ src: audioSrc,
229
+ preload: "metadata",
230
+ onLoadedMetadata: onLoadedMetadata
231
+ }), /*#__PURE__*/React__default.createElement("div", {
232
+ className: "player-layout"
233
+ }, volumeCtrl && /*#__PURE__*/React__default.createElement("div", {
234
+ className: "player-controls-secondary-outer"
235
+ }, /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement("span", {
236
+ className: "player-volume-text"
237
+ }, /*#__PURE__*/React__default.createElement("img", {
238
+ src: "/img/icon-volume-low.svg",
239
+ alt: ""
240
+ }), "Volume"), /*#__PURE__*/React__default.createElement("div", {
241
+ className: "player-controls player-controls-secondary"
242
+ }, /*#__PURE__*/React__default.createElement("div", {
243
+ className: "player-volume"
244
+ }, /*#__PURE__*/React__default.createElement("input", {
245
+ id: "player-volume",
246
+ type: "range",
247
+ className: "player-timeline-progress js-player-volume-current",
248
+ min: 0,
249
+ max: 100,
250
+ "aria-hidden": "true",
251
+ onChange: function onChange(e) {
252
+ return volumeControl(e);
253
+ }
254
+ }))))), /*#__PURE__*/React__default.createElement("div", {
255
+ className: "player-controls"
256
+ }, /*#__PURE__*/React__default.createElement("div", {
257
+ className: "player-btn-play-pause-outer"
258
+ }, /*#__PURE__*/React__default.createElement("button", {
259
+ onClick: togglePlaying,
260
+ className: playBtnClass,
261
+ style: customStyles && customStyles.playPause
262
+ }, isPlaying ? /*#__PURE__*/React__default.createElement(Pause, null) : /*#__PURE__*/React__default.createElement(Play, null)))), customHtml && customHtml, customProps.audioThumbnailSrc && /*#__PURE__*/React__default.createElement("div", {
263
+ className: "player-thumb-and-text"
264
+ }, /*#__PURE__*/React__default.createElement("div", {
265
+ className: "player-thumbnail"
266
+ }, /*#__PURE__*/React__default.createElement("img", {
267
+ className: "player-thumbnail",
268
+ src: customProps.audioThumbnailSrc,
269
+ alt: customProps.audioThumbnailAlt
270
+ }))), !isLive && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
271
+ className: "player-currentTime"
174
272
  }, calculateTime(currentTime)), /*#__PURE__*/React__default.createElement("div", {
175
- className: "progressBarContainer"
273
+ className: "player-timeline"
176
274
  }, /*#__PURE__*/React__default.createElement("input", {
177
275
  type: "range",
178
- className: "progressBar",
276
+ className: "player-timeline-progress",
179
277
  defaultValue: "0",
180
- ref: progressBar,
278
+ "aria-hidden": "true",
279
+ ref: progressBarRef,
181
280
  onChange: changePlayerCurrentTime
182
281
  })), /*#__PURE__*/React__default.createElement("div", {
183
- className: "duration",
282
+ className: "player-duration",
184
283
  style: customStyles && customStyles.duration
185
- }, duration && !isNaN(duration) && calculateTime(duration)), /*#__PURE__*/React__default.createElement("div", {
186
- className: "textBox"
284
+ }, duration && !isNaN(duration) && calculateTime(duration))), /*#__PURE__*/React__default.createElement("div", {
285
+ className: "player-content"
187
286
  }, /*#__PURE__*/React__default.createElement("div", {
188
- className: "textBoxTitle"
287
+ className: "player-audio-type type-sm"
288
+ }, isLive ? /*#__PURE__*/React__default.createElement("div", {
289
+ className: "player-live-label"
290
+ }, "On Air") : /*#__PURE__*/React__default.createElement("div", {
291
+ className: "player-title"
189
292
  }, " ", title || '', " "), /*#__PURE__*/React__default.createElement("div", {
190
- className: "textBoxDescription"
191
- }, " ", description || '', " ")), ' ', "*/}");
293
+ className: "player-description"
294
+ }, description || '', " ")))));
192
295
  };
193
296
 
194
297
  exports.ReactAudioPlayer = ReactAudioPlayer;
298
+ exports.useAudioPlayer = useAudioPlayer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apm-react-audio-player",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "author": "Jason Phan <jphan@mpr.org>",
5
5
  "license": "MIT",
6
6
  "private": false,