react-native-audio-player-button 1.0.3 → 1.0.5
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/README.md +4 -5
- package/lib/commonjs/components/AudioIconComponent.js +28 -6
- package/lib/commonjs/components/AudioIconComponent.js.map +1 -1
- package/lib/commonjs/helpers/audio_icon_helper.js +10 -1
- package/lib/commonjs/helpers/audio_icon_helper.js.map +1 -1
- package/lib/module/components/AudioIconComponent.js +28 -6
- package/lib/module/components/AudioIconComponent.js.map +1 -1
- package/lib/module/helpers/audio_icon_helper.js +10 -1
- package/lib/module/helpers/audio_icon_helper.js.map +1 -1
- package/package.json +2 -2
- package/src/components/AudioIconComponent.js +17 -5
- package/src/helpers/audio_icon_helper.js +6 -0
package/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
<span><img src="https://user-images.githubusercontent.com/18114944/215944532-c1ce1e50-9744-4f75-899e-a801d4a2b080.png" width="250" height="500" /></span>
|
|
1
|
+
React Native Audio Player Button is a custom button with an icon for playing audio. The user is able to use this button as many as they want on the same screen without having the issue of overlapping playing audio.
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
<span><img src="https://user-images.githubusercontent.com/18114944/215944532-c1ce1e50-9744-4f75-899e-a801d4a2b080.png" width="250" height="500" /></span>
|
|
5
4
|
|
|
6
5
|
## Support
|
|
7
6
|
iOS & Android
|
|
@@ -30,7 +29,7 @@ import FAIcon from 'react-native-vector-icons/FontAwesome';
|
|
|
30
29
|
const [playingUuid, setPlayingUuid] = React.useState(null);
|
|
31
30
|
|
|
32
31
|
<AudioPlayerButton
|
|
33
|
-
audio={require('
|
|
32
|
+
audio={require('sample.mp3')}
|
|
34
33
|
itemUuid='abcdefg'
|
|
35
34
|
isSpeakerIcon={true}
|
|
36
35
|
rippled={true}
|
|
@@ -62,7 +61,7 @@ const [playingUuid, setPlayingUuid] = React.useState(null);
|
|
|
62
61
|
| iconSize | 24 or 26 | `number` | `true` | The size of the icons (play and pause icon) |
|
|
63
62
|
| iconPrimaryColor | '#000000' | `string` | `true` | The color of the icon before playing the audio |
|
|
64
63
|
| iconSecondaryColor | '#808080' | `string` | `true` | The color of the icon while playing the audio |
|
|
65
|
-
| playingUuid | '' | `string` | `false` | The uuid of the playing
|
|
64
|
+
| playingUuid | '' | `string` | `false` | The uuid of the playing audio component (to prevent playing audio overlap each other) |
|
|
66
65
|
| hasShadow | false | `boolean` | `true` | The shadow of the button (Android only) |
|
|
67
66
|
| allowPause | false | `boolean` | `true` | Allow to pause the audio when toggle the button |
|
|
68
67
|
| isFromAppBundle | false | `boolean` | `false` | Set to `true` to play the audio that is stored in the app bundle (ex: the downloaded audio) |
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
8
9
|
var _color_constant = _interopRequireDefault(require("../constants/color_constant"));
|
|
9
10
|
var _component_constant = require("../constants/component_constant");
|
|
10
11
|
var _audio_icon_helper = _interopRequireDefault(require("../helpers/audio_icon_helper"));
|
|
@@ -16,16 +17,37 @@ const AudioIconComponent = props => {
|
|
|
16
17
|
return props.isPlaying ? secondaryColor : primaryColor;
|
|
17
18
|
};
|
|
18
19
|
const iconSize = props.iconSize || _component_constant.defaultIconSize;
|
|
20
|
+
const renderStrikeLine = () => {
|
|
21
|
+
return /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
22
|
+
style: {
|
|
23
|
+
height: 3,
|
|
24
|
+
width: iconSize,
|
|
25
|
+
transform: [{
|
|
26
|
+
rotate: '45deg'
|
|
27
|
+
}],
|
|
28
|
+
backgroundColor: 'white',
|
|
29
|
+
justifyContent: 'center',
|
|
30
|
+
position: 'absolute',
|
|
31
|
+
top: iconSize / 2.4,
|
|
32
|
+
left: -2,
|
|
33
|
+
zIndex: 10
|
|
34
|
+
}
|
|
35
|
+
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
|
|
36
|
+
style: {
|
|
37
|
+
height: 1.5,
|
|
38
|
+
backgroundColor: _color_constant.default.muted
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
19
42
|
{/* CloneElement is used so we can pass different type of icon and still using the same configuration */}
|
|
20
|
-
return /*#__PURE__*/_react.default.cloneElement(_audio_icon_helper.default.getIcon(props.customIcon, props.isSpeakerIcon), {
|
|
43
|
+
return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, !props.audio && !props.isSpeakerIcon && !props.customIcon && renderStrikeLine(), /*#__PURE__*/_react.default.cloneElement(_audio_icon_helper.default.getIcon(props.customIcon, props.isSpeakerIcon), {
|
|
21
44
|
name: _audio_icon_helper.default.getIconName(props.customIconSet, props.isSpeakerIcon, props.audio, props.isPlaying),
|
|
22
45
|
size: iconSize,
|
|
23
46
|
color: !!props.audio ? getIconColor() : _color_constant.default.muted,
|
|
24
|
-
style: [
|
|
25
|
-
width: iconSize
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
});
|
|
47
|
+
style: [{
|
|
48
|
+
width: iconSize
|
|
49
|
+
}, _audio_icon_helper.default.getIconMargin(props.isPlaying, props.isSpeakerIcon, !!props.customIcon), props.iconStyle]
|
|
50
|
+
}));
|
|
29
51
|
};
|
|
30
52
|
var _default = AudioIconComponent;
|
|
31
53
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AudioIconComponent","props","getIconColor","primaryColor","iconPrimaryColor","primaryIconColor","secondaryColor","iconSecondaryColor","secondaryIconColor","isPlaying","iconSize","defaultIconSize","
|
|
1
|
+
{"version":3,"names":["AudioIconComponent","props","getIconColor","primaryColor","iconPrimaryColor","primaryIconColor","secondaryColor","iconSecondaryColor","secondaryIconColor","isPlaying","iconSize","defaultIconSize","renderStrikeLine","height","width","transform","rotate","backgroundColor","justifyContent","position","top","left","zIndex","color","muted","audio","isSpeakerIcon","customIcon","React","cloneElement","audioIconHelper","getIcon","name","getIconName","customIconSet","size","style","getIconMargin","iconStyle"],"sourceRoot":"../../src","sources":["AudioIconComponent.js"],"mappings":";;;;;;AAAA;AACA;AAEA;AACA;AACA;AAA2D;AAE3D,MAAMA,kBAAkB,GAAIC,KAAK,IAAK;EACpC,MAAMC,YAAY,GAAG,MAAM;IACzB,MAAMC,YAAY,GAAGF,KAAK,CAACG,gBAAgB,IAAIC,oCAAgB;IAC/D,MAAMC,cAAc,GAAGL,KAAK,CAACM,kBAAkB,IAAIC,sCAAkB;IACrE,OAAOP,KAAK,CAACQ,SAAS,GAAGH,cAAc,GAAGH,YAAY;EACxD,CAAC;EAED,MAAMO,QAAQ,GAAGT,KAAK,CAACS,QAAQ,IAAIC,mCAAe;EAElD,MAAMC,gBAAgB,GAAG,MAAM;IAC7B,oBAAO,6BAAC,iBAAI;MAAC,KAAK,EAAE;QAACC,MAAM,EAAE,CAAC;QAAEC,KAAK,EAAEJ,QAAQ;QAAEK,SAAS,EAAE,CAAC;UAACC,MAAM,EAAE;QAAO,CAAC,CAAC;QAAEC,eAAe,EAAE,OAAO;QAAEC,cAAc,EAAE,QAAQ;QAAEC,QAAQ,EAAE,UAAU;QAAEC,GAAG,EAAEV,QAAQ,GAAG,GAAG;QAAEW,IAAI,EAAE,CAAC,CAAC;QAAEC,MAAM,EAAE;MAAE;IAAE,gBAC5L,6BAAC,iBAAI;MAAC,KAAK,EAAE;QAACT,MAAM,EAAE,GAAG;QAAEI,eAAe,EAAEM,uBAAK,CAACC;MAAK;IAAE,EAAG,CACxD;EAChB,CAAC;EAED,CAAC;EACD,oBACE,6BAAC,iBAAI,QACD,CAACvB,KAAK,CAACwB,KAAK,IAAI,CAACxB,KAAK,CAACyB,aAAa,IAAI,CAACzB,KAAK,CAAC0B,UAAU,IAAKf,gBAAgB,EAAE,eAEhFgB,cAAK,CAACC,YAAY,CAACC,0BAAe,CAACC,OAAO,CAAC9B,KAAK,CAAC0B,UAAU,EAAE1B,KAAK,CAACyB,aAAa,CAAC,EAAE;IACjFM,IAAI,EAAEF,0BAAe,CAACG,WAAW,CAAChC,KAAK,CAACiC,aAAa,EAAEjC,KAAK,CAACyB,aAAa,EAAEzB,KAAK,CAACwB,KAAK,EAAExB,KAAK,CAACQ,SAAS,CAAC;IACzG0B,IAAI,EAAEzB,QAAQ;IAAEa,KAAK,EAAE,CAAC,CAACtB,KAAK,CAACwB,KAAK,GAAGvB,YAAY,EAAE,GAAGqB,uBAAK,CAACC,KAAK;IACnEY,KAAK,EAAE,CAAC;MAAEtB,KAAK,EAAEJ;IAAS,CAAC,EAAEoB,0BAAe,CAACO,aAAa,CAACpC,KAAK,CAACQ,SAAS,EAAER,KAAK,CAACyB,aAAa,EAAE,CAAC,CAACzB,KAAK,CAAC0B,UAAU,CAAC,EAAE1B,KAAK,CAACqC,SAAS;EACvI,CAAC,CAAC,CAEC;AAEX,CAAC;AAAA,eAEctC,kBAAkB;AAAA;AAEjC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAZC"}
|
|
@@ -12,7 +12,8 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
12
12
|
const audioIconHelper = (() => {
|
|
13
13
|
return {
|
|
14
14
|
getIcon,
|
|
15
|
-
getIconName
|
|
15
|
+
getIconName,
|
|
16
|
+
getIconMargin
|
|
16
17
|
};
|
|
17
18
|
function getIcon(customIcon, isSpeakerIcon) {
|
|
18
19
|
return customIcon ? customIcon : isSpeakerIcon ? /*#__PURE__*/_react.default.createElement(_Ionicons.default, null) : /*#__PURE__*/_react.default.createElement(_Feather.default, null);
|
|
@@ -22,6 +23,14 @@ const audioIconHelper = (() => {
|
|
|
22
23
|
if (!audio) return icon.mute;
|
|
23
24
|
return isPlaying ? icon.pause : icon.play;
|
|
24
25
|
}
|
|
26
|
+
function getIconMargin(isPlaying, isSpeakerIcon) {
|
|
27
|
+
if (isPlaying && !isSpeakerIcon) return {
|
|
28
|
+
marginLeft: -1
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
marginLeft: 0
|
|
32
|
+
};
|
|
33
|
+
}
|
|
25
34
|
})();
|
|
26
35
|
var _default = audioIconHelper;
|
|
27
36
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["audioIconHelper","getIcon","getIconName","customIcon","isSpeakerIcon","customIconSet","audio","isPlaying","icon","defaultAudioIconSet","mute","pause","play"],"sourceRoot":"../../src","sources":["audio_icon_helper.js"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAA+D;AAE/D,MAAMA,eAAe,GAAG,CAAC,MAAM;EAC7B,OAAO;IACLC,OAAO;IACPC;EACF,CAAC;EAED,
|
|
1
|
+
{"version":3,"names":["audioIconHelper","getIcon","getIconName","getIconMargin","customIcon","isSpeakerIcon","customIconSet","audio","isPlaying","icon","defaultAudioIconSet","mute","pause","play","marginLeft"],"sourceRoot":"../../src","sources":["audio_icon_helper.js"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAA+D;AAE/D,MAAMA,eAAe,GAAG,CAAC,MAAM;EAC7B,OAAO;IACLC,OAAO;IACPC,WAAW;IACXC;EACF,CAAC;EAED,SAASF,OAAO,CAACG,UAAU,EAAEC,aAAa,EAAE;IAC1C,OAAOD,UAAU,GAAGA,UAAU,GAAGC,aAAa,gBAAG,6BAAC,iBAAO,OAAE,gBAAG,6BAAC,gBAAW,OAAE;EAC9E;EAEA,SAASH,WAAW,CAACI,aAAa,EAAED,aAAa,EAAEE,KAAK,EAAEC,SAAS,EAAE;IACnE,MAAMC,IAAI,GAAGH,aAAa,GAAGA,aAAa,GAAGD,aAAa,GAAGK,kCAAmB,CAAC,UAAU,CAAC,GAAGA,kCAAmB,CAAC,SAAS,CAAC;IAC7H,IAAI,CAACH,KAAK,EACR,OAAOE,IAAI,CAACE,IAAI;IAElB,OAAOH,SAAS,GAAGC,IAAI,CAACG,KAAK,GAAGH,IAAI,CAACI,IAAI;EAC3C;EAEA,SAASV,aAAa,CAACK,SAAS,EAAEH,aAAa,EAAE;IAC/C,IAAIG,SAAS,IAAI,CAACH,aAAa,EAAE,OAAO;MAAES,UAAU,EAAE,CAAC;IAAE,CAAC;IAC1D,OAAO;MAAEA,UAAU,EAAE;IAAE,CAAC;EAC1B;AACF,CAAC,GAAG;AAAA,eAEWd,eAAe;AAAA"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
2
3
|
import color from '../constants/color_constant';
|
|
3
4
|
import { defaultIconSize, primaryIconColor, secondaryIconColor } from '../constants/component_constant';
|
|
4
5
|
import audioIconHelper from '../helpers/audio_icon_helper';
|
|
@@ -9,16 +10,37 @@ const AudioIconComponent = props => {
|
|
|
9
10
|
return props.isPlaying ? secondaryColor : primaryColor;
|
|
10
11
|
};
|
|
11
12
|
const iconSize = props.iconSize || defaultIconSize;
|
|
13
|
+
const renderStrikeLine = () => {
|
|
14
|
+
return /*#__PURE__*/React.createElement(View, {
|
|
15
|
+
style: {
|
|
16
|
+
height: 3,
|
|
17
|
+
width: iconSize,
|
|
18
|
+
transform: [{
|
|
19
|
+
rotate: '45deg'
|
|
20
|
+
}],
|
|
21
|
+
backgroundColor: 'white',
|
|
22
|
+
justifyContent: 'center',
|
|
23
|
+
position: 'absolute',
|
|
24
|
+
top: iconSize / 2.4,
|
|
25
|
+
left: -2,
|
|
26
|
+
zIndex: 10
|
|
27
|
+
}
|
|
28
|
+
}, /*#__PURE__*/React.createElement(View, {
|
|
29
|
+
style: {
|
|
30
|
+
height: 1.5,
|
|
31
|
+
backgroundColor: color.muted
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
};
|
|
12
35
|
{/* CloneElement is used so we can pass different type of icon and still using the same configuration */}
|
|
13
|
-
return /*#__PURE__*/React.cloneElement(audioIconHelper.getIcon(props.customIcon, props.isSpeakerIcon), {
|
|
36
|
+
return /*#__PURE__*/React.createElement(View, null, !props.audio && !props.isSpeakerIcon && !props.customIcon && renderStrikeLine(), /*#__PURE__*/React.cloneElement(audioIconHelper.getIcon(props.customIcon, props.isSpeakerIcon), {
|
|
14
37
|
name: audioIconHelper.getIconName(props.customIconSet, props.isSpeakerIcon, props.audio, props.isPlaying),
|
|
15
38
|
size: iconSize,
|
|
16
39
|
color: !!props.audio ? getIconColor() : color.muted,
|
|
17
|
-
style: [
|
|
18
|
-
width: iconSize
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
});
|
|
40
|
+
style: [{
|
|
41
|
+
width: iconSize
|
|
42
|
+
}, audioIconHelper.getIconMargin(props.isPlaying, props.isSpeakerIcon, !!props.customIcon), props.iconStyle]
|
|
43
|
+
}));
|
|
22
44
|
};
|
|
23
45
|
export default AudioIconComponent;
|
|
24
46
|
{/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","color","defaultIconSize","primaryIconColor","secondaryIconColor","audioIconHelper","AudioIconComponent","props","getIconColor","primaryColor","iconPrimaryColor","secondaryColor","iconSecondaryColor","isPlaying","iconSize","
|
|
1
|
+
{"version":3,"names":["React","View","color","defaultIconSize","primaryIconColor","secondaryIconColor","audioIconHelper","AudioIconComponent","props","getIconColor","primaryColor","iconPrimaryColor","secondaryColor","iconSecondaryColor","isPlaying","iconSize","renderStrikeLine","height","width","transform","rotate","backgroundColor","justifyContent","position","top","left","zIndex","muted","audio","isSpeakerIcon","customIcon","cloneElement","getIcon","name","getIconName","customIconSet","size","style","getIconMargin","iconStyle"],"sourceRoot":"../../src","sources":["AudioIconComponent.js"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAAQC,IAAI,QAAO,cAAc;AAEjC,OAAOC,KAAK,MAAM,6BAA6B;AAC/C,SAAQC,eAAe,EAAEC,gBAAgB,EAAEC,kBAAkB,QAAO,iCAAiC;AACrG,OAAOC,eAAe,MAAM,8BAA8B;AAE1D,MAAMC,kBAAkB,GAAIC,KAAK,IAAK;EACpC,MAAMC,YAAY,GAAG,MAAM;IACzB,MAAMC,YAAY,GAAGF,KAAK,CAACG,gBAAgB,IAAIP,gBAAgB;IAC/D,MAAMQ,cAAc,GAAGJ,KAAK,CAACK,kBAAkB,IAAIR,kBAAkB;IACrE,OAAOG,KAAK,CAACM,SAAS,GAAGF,cAAc,GAAGF,YAAY;EACxD,CAAC;EAED,MAAMK,QAAQ,GAAGP,KAAK,CAACO,QAAQ,IAAIZ,eAAe;EAElD,MAAMa,gBAAgB,GAAG,MAAM;IAC7B,oBAAO,oBAAC,IAAI;MAAC,KAAK,EAAE;QAACC,MAAM,EAAE,CAAC;QAAEC,KAAK,EAAEH,QAAQ;QAAEI,SAAS,EAAE,CAAC;UAACC,MAAM,EAAE;QAAO,CAAC,CAAC;QAAEC,eAAe,EAAE,OAAO;QAAEC,cAAc,EAAE,QAAQ;QAAEC,QAAQ,EAAE,UAAU;QAAEC,GAAG,EAAET,QAAQ,GAAG,GAAG;QAAEU,IAAI,EAAE,CAAC,CAAC;QAAEC,MAAM,EAAE;MAAE;IAAE,gBAC5L,oBAAC,IAAI;MAAC,KAAK,EAAE;QAACT,MAAM,EAAE,GAAG;QAAEI,eAAe,EAAEnB,KAAK,CAACyB;MAAK;IAAE,EAAG,CACxD;EAChB,CAAC;EAED,CAAC;EACD,oBACE,oBAAC,IAAI,QACD,CAACnB,KAAK,CAACoB,KAAK,IAAI,CAACpB,KAAK,CAACqB,aAAa,IAAI,CAACrB,KAAK,CAACsB,UAAU,IAAKd,gBAAgB,EAAE,eAEhFhB,KAAK,CAAC+B,YAAY,CAACzB,eAAe,CAAC0B,OAAO,CAACxB,KAAK,CAACsB,UAAU,EAAEtB,KAAK,CAACqB,aAAa,CAAC,EAAE;IACjFI,IAAI,EAAE3B,eAAe,CAAC4B,WAAW,CAAC1B,KAAK,CAAC2B,aAAa,EAAE3B,KAAK,CAACqB,aAAa,EAAErB,KAAK,CAACoB,KAAK,EAAEpB,KAAK,CAACM,SAAS,CAAC;IACzGsB,IAAI,EAAErB,QAAQ;IAAEb,KAAK,EAAE,CAAC,CAACM,KAAK,CAACoB,KAAK,GAAGnB,YAAY,EAAE,GAAGP,KAAK,CAACyB,KAAK;IACnEU,KAAK,EAAE,CAAC;MAAEnB,KAAK,EAAEH;IAAS,CAAC,EAAET,eAAe,CAACgC,aAAa,CAAC9B,KAAK,CAACM,SAAS,EAAEN,KAAK,CAACqB,aAAa,EAAE,CAAC,CAACrB,KAAK,CAACsB,UAAU,CAAC,EAAEtB,KAAK,CAAC+B,SAAS;EACvI,CAAC,CAAC,CAEC;AAEX,CAAC;AAED,eAAehC,kBAAkB;AAEjC,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAZC"}
|
|
@@ -5,7 +5,8 @@ import { defaultAudioIconSet } from '../constants/icon_constant';
|
|
|
5
5
|
const audioIconHelper = (() => {
|
|
6
6
|
return {
|
|
7
7
|
getIcon,
|
|
8
|
-
getIconName
|
|
8
|
+
getIconName,
|
|
9
|
+
getIconMargin
|
|
9
10
|
};
|
|
10
11
|
function getIcon(customIcon, isSpeakerIcon) {
|
|
11
12
|
return customIcon ? customIcon : isSpeakerIcon ? /*#__PURE__*/React.createElement(IonIcon, null) : /*#__PURE__*/React.createElement(FeatherIcon, null);
|
|
@@ -15,6 +16,14 @@ const audioIconHelper = (() => {
|
|
|
15
16
|
if (!audio) return icon.mute;
|
|
16
17
|
return isPlaying ? icon.pause : icon.play;
|
|
17
18
|
}
|
|
19
|
+
function getIconMargin(isPlaying, isSpeakerIcon) {
|
|
20
|
+
if (isPlaying && !isSpeakerIcon) return {
|
|
21
|
+
marginLeft: -1
|
|
22
|
+
};
|
|
23
|
+
return {
|
|
24
|
+
marginLeft: 0
|
|
25
|
+
};
|
|
26
|
+
}
|
|
18
27
|
})();
|
|
19
28
|
export default audioIconHelper;
|
|
20
29
|
//# sourceMappingURL=audio_icon_helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","FeatherIcon","IonIcon","defaultAudioIconSet","audioIconHelper","getIcon","getIconName","customIcon","isSpeakerIcon","customIconSet","audio","isPlaying","icon","mute","pause","play"],"sourceRoot":"../../src","sources":["audio_icon_helper.js"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,WAAW,MAAM,mCAAmC;AAC3D,OAAOC,OAAO,MAAM,oCAAoC;AACxD,SAAQC,mBAAmB,QAAO,4BAA4B;AAE9D,MAAMC,eAAe,GAAG,CAAC,MAAM;EAC7B,OAAO;IACLC,OAAO;IACPC;EACF,CAAC;EAED,
|
|
1
|
+
{"version":3,"names":["React","FeatherIcon","IonIcon","defaultAudioIconSet","audioIconHelper","getIcon","getIconName","getIconMargin","customIcon","isSpeakerIcon","customIconSet","audio","isPlaying","icon","mute","pause","play","marginLeft"],"sourceRoot":"../../src","sources":["audio_icon_helper.js"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,WAAW,MAAM,mCAAmC;AAC3D,OAAOC,OAAO,MAAM,oCAAoC;AACxD,SAAQC,mBAAmB,QAAO,4BAA4B;AAE9D,MAAMC,eAAe,GAAG,CAAC,MAAM;EAC7B,OAAO;IACLC,OAAO;IACPC,WAAW;IACXC;EACF,CAAC;EAED,SAASF,OAAO,CAACG,UAAU,EAAEC,aAAa,EAAE;IAC1C,OAAOD,UAAU,GAAGA,UAAU,GAAGC,aAAa,gBAAG,oBAAC,OAAO,OAAE,gBAAG,oBAAC,WAAW,OAAE;EAC9E;EAEA,SAASH,WAAW,CAACI,aAAa,EAAED,aAAa,EAAEE,KAAK,EAAEC,SAAS,EAAE;IACnE,MAAMC,IAAI,GAAGH,aAAa,GAAGA,aAAa,GAAGD,aAAa,GAAGN,mBAAmB,CAAC,UAAU,CAAC,GAAGA,mBAAmB,CAAC,SAAS,CAAC;IAC7H,IAAI,CAACQ,KAAK,EACR,OAAOE,IAAI,CAACC,IAAI;IAElB,OAAOF,SAAS,GAAGC,IAAI,CAACE,KAAK,GAAGF,IAAI,CAACG,IAAI;EAC3C;EAEA,SAAST,aAAa,CAACK,SAAS,EAAEH,aAAa,EAAE;IAC/C,IAAIG,SAAS,IAAI,CAACH,aAAa,EAAE,OAAO;MAAEQ,UAAU,EAAE,CAAC;IAAE,CAAC;IAC1D,OAAO;MAAEA,UAAU,EAAE;IAAE,CAAC;EAC1B;AACF,CAAC,GAAG;AAEJ,eAAeb,eAAe"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-audio-player-button",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.5",
|
|
4
|
+
"description": "A custom button with an icon for playing audio. It is able to play the audio without overlapping each other.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
7
7
|
"types": "lib/typescript/index.d.ts",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
|
+
import {View} from 'react-native'
|
|
2
3
|
|
|
3
4
|
import color from '../constants/color_constant';
|
|
4
5
|
import {defaultIconSize, primaryIconColor, secondaryIconColor} from '../constants/component_constant';
|
|
@@ -13,13 +14,24 @@ const AudioIconComponent = (props) => {
|
|
|
13
14
|
|
|
14
15
|
const iconSize = props.iconSize || defaultIconSize
|
|
15
16
|
|
|
17
|
+
const renderStrikeLine = () => {
|
|
18
|
+
return <View style={{height: 3, width: iconSize, transform: [{rotate: '45deg'}], backgroundColor: 'white', justifyContent: 'center', position: 'absolute', top: iconSize / 2.4, left: -2, zIndex: 10}}>
|
|
19
|
+
<View style={{height: 1.5, backgroundColor: color.muted}} />
|
|
20
|
+
</View>
|
|
21
|
+
}
|
|
22
|
+
|
|
16
23
|
{/* CloneElement is used so we can pass different type of icon and still using the same configuration */}
|
|
17
24
|
return (
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
<View>
|
|
26
|
+
{(!props.audio && !props.isSpeakerIcon && !props.customIcon) && renderStrikeLine()}
|
|
27
|
+
{
|
|
28
|
+
React.cloneElement(audioIconHelper.getIcon(props.customIcon, props.isSpeakerIcon), {
|
|
29
|
+
name: audioIconHelper.getIconName(props.customIconSet, props.isSpeakerIcon, props.audio, props.isPlaying),
|
|
30
|
+
size: iconSize, color: !!props.audio ? getIconColor() : color.muted,
|
|
31
|
+
style: [{ width: iconSize }, audioIconHelper.getIconMargin(props.isPlaying, props.isSpeakerIcon, !!props.customIcon), props.iconStyle]
|
|
32
|
+
})
|
|
33
|
+
}
|
|
34
|
+
</View>
|
|
23
35
|
)
|
|
24
36
|
}
|
|
25
37
|
|
|
@@ -7,6 +7,7 @@ const audioIconHelper = (() => {
|
|
|
7
7
|
return {
|
|
8
8
|
getIcon,
|
|
9
9
|
getIconName,
|
|
10
|
+
getIconMargin,
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
function getIcon(customIcon, isSpeakerIcon) {
|
|
@@ -20,6 +21,11 @@ const audioIconHelper = (() => {
|
|
|
20
21
|
|
|
21
22
|
return isPlaying ? icon.pause : icon.play;
|
|
22
23
|
}
|
|
24
|
+
|
|
25
|
+
function getIconMargin(isPlaying, isSpeakerIcon) {
|
|
26
|
+
if (isPlaying && !isSpeakerIcon) return { marginLeft: -1 }
|
|
27
|
+
return { marginLeft: 0 }
|
|
28
|
+
}
|
|
23
29
|
})()
|
|
24
30
|
|
|
25
31
|
export default audioIconHelper
|