prixa-telemedicine-rn-sdk
Version:
Welcome to Prixa Telemedicine. This is React Native SDK to our platform, Prixa Telemedicine.
10,144 lines • 372 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('i18n-js'), require('prop-types'), require('react'), require('react-navigation'), require('react-navigation-stack'), require('react-redux'), require('redux'), require('react-native'), require('react-native-auto-height-image'), require('axios'), require('react-native-markdown-renderer'), require('@react-native-community/async-storage'), require('react-native-timeline-flatlist'), require('lodash'), require('react-native-parallax-scroll-view'), require('moment'), require('react-native-webview'), require('react-native-modal'), require('react-native-wheel-picker-android'), require('react-native-slider'), require('react-native-picker-select'), require('react-native-collapsible/Accordion'), require('@react-native-community/datetimepicker'), require('@react-native-community/cameraroll'), require('rn-fetch-blob'), require('react-native-app-intro-slider'), require('react-native-incall-manager'), require('react-native-voximplant'), require('currency.js'), require('react-native-svg'), require('react-native-searchable-dropdown')) :
typeof define === 'function' && define.amd ? define(['i18n-js', 'prop-types', 'react', 'react-navigation', 'react-navigation-stack', 'react-redux', 'redux', 'react-native', 'react-native-auto-height-image', 'axios', 'react-native-markdown-renderer', '@react-native-community/async-storage', 'react-native-timeline-flatlist', 'lodash', 'react-native-parallax-scroll-view', 'moment', 'react-native-webview', 'react-native-modal', 'react-native-wheel-picker-android', 'react-native-slider', 'react-native-picker-select', 'react-native-collapsible/Accordion', '@react-native-community/datetimepicker', '@react-native-community/cameraroll', 'rn-fetch-blob', 'react-native-app-intro-slider', 'react-native-incall-manager', 'react-native-voximplant', 'currency.js', 'react-native-svg', 'react-native-searchable-dropdown'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, global['prixa-telemedicine-rn-sdk'] = factory(global.I18n, global.PropTypes, global.React, global.reactNavigation, global.reactNavigationStack, global.reactRedux, global.redux, global.reactNative, global.AutoHeightImage, global.axios, global.Markdown, global.AsyncStorage, global.Timeline, global._, global.ParallaxScrollView, global.moment, global.reactNativeWebview, global.Modal, global.reactNativeWheelPickerAndroid, global.Slider, global.PickerSelect, global.Accordion, global.DateTimePicker, global.CameraRoll, global.RNFetchBlob, global.AppIntroSlider, global.InCallManager, global.reactNativeVoximplant, global.currency, global.Svg, global.SearchableDropdown));
}(this, (function (I18n, PropTypes, React, reactNavigation, reactNavigationStack, reactRedux, redux, reactNative, AutoHeightImage, axios, Markdown, AsyncStorage, Timeline, _, ParallaxScrollView, moment, reactNativeWebview, Modal, reactNativeWheelPickerAndroid, Slider, PickerSelect, Accordion, DateTimePicker, CameraRoll, RNFetchBlob, AppIntroSlider, InCallManager, reactNativeVoximplant, currency, Svg, SearchableDropdown) { 'use strict';
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var I18n__default = /*#__PURE__*/_interopDefaultLegacy(I18n);
var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
var AutoHeightImage__default = /*#__PURE__*/_interopDefaultLegacy(AutoHeightImage);
var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
var Markdown__default = /*#__PURE__*/_interopDefaultLegacy(Markdown);
var AsyncStorage__default = /*#__PURE__*/_interopDefaultLegacy(AsyncStorage);
var Timeline__default = /*#__PURE__*/_interopDefaultLegacy(Timeline);
var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
var ParallaxScrollView__default = /*#__PURE__*/_interopDefaultLegacy(ParallaxScrollView);
var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
var Modal__default = /*#__PURE__*/_interopDefaultLegacy(Modal);
var Slider__default = /*#__PURE__*/_interopDefaultLegacy(Slider);
var PickerSelect__default = /*#__PURE__*/_interopDefaultLegacy(PickerSelect);
var Accordion__default = /*#__PURE__*/_interopDefaultLegacy(Accordion);
var DateTimePicker__default = /*#__PURE__*/_interopDefaultLegacy(DateTimePicker);
var CameraRoll__default = /*#__PURE__*/_interopDefaultLegacy(CameraRoll);
var RNFetchBlob__default = /*#__PURE__*/_interopDefaultLegacy(RNFetchBlob);
var AppIntroSlider__default = /*#__PURE__*/_interopDefaultLegacy(AppIntroSlider);
var InCallManager__default = /*#__PURE__*/_interopDefaultLegacy(InCallManager);
var currency__default = /*#__PURE__*/_interopDefaultLegacy(currency);
var Svg__default = /*#__PURE__*/_interopDefaultLegacy(Svg);
var SearchableDropdown__default = /*#__PURE__*/_interopDefaultLegacy(SearchableDropdown);
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _extends() {
_extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
return _extends.apply(this, arguments);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
subClass.__proto__ = superClass;
}
function _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
var localizations = {
date: {
"default": "%-d %B %Y"
},
time: {
"default": "%H:%M"
}
};
var translations = {
address: "Alamat",
addressDelivery: "Alamat Pengiriman",
age: "Usia",
ageText: "Tahun",
birthdate: "Tanggal Lahir",
cancel: "Batal",
"class": "Kelas",
done: "Selesai",
education: "Pendidikan",
email: "Email",
female: "Perempuan",
gender: "Jenis Kelamin",
hospital: "Rumah Sakit",
intendedFor: "Ditujukan untuk siapa sesi konsultasi ini?",
male: "Laki-Laki",
myDependency: "Tertanggung",
dependencyNotAvailable: "Daftar peserta tidak tersedia",
next: "Selanjutnya",
others: "Lainnya",
phoneNumber: "Nomor Telepon",
cellphoneNumber: "Nomor Ponsel",
practiceLicense: "SIP",
lifepackSubscriptionIdWithNumber: "Nomor Pesanan: {{no}}",
lifepackSubscriptionId: "Nomor Pesanan",
prescriptionNoAlt: "Nomor Resep",
prescriptionDate: "Tanggal Resep Dibuat",
redeemDate: "Tanggal Pembelian",
prescriptionDelivery: "Status Pesanan",
prescriptionStatusDelivery: "Status Pesanan: {{status}}",
prescriptionDeliveryStatuses: {
in_review: "Resep sedang ditinjau",
prescription_approved: "Resep disetujui apoteker",
prescriprion_adjusted: "Resep diterima dengan perubahan",
order_cancelled: "Pesanan dibatalkan",
prescription_rejected: "Resep ditolak apoteker",
pending_address: "Menantikan alamat",
payment_order: "Menunggu pembayaran",
waiting_for_payment: "Menunggu pembayaran",
payment_successful: "Pembayaran berhasil",
payment_expired: "Tempo pembayaran kadaluarsa",
payment_failed: "Pembayaran tidak berhasil",
order_processed: "Pesanan dipersiapkan",
waiting_for_pickup: "Menunggu dijemput",
picked_up: "Pesanan sudah dijemput",
on_delivery: "Pesanan dalam pengantaran",
delivered: "Pesanan diterima",
delivery_failed: "Pengantaran gagal",
active: "Aktif",
inactive: "Tidak aktif"
},
prescriptionDeliveryDetail: "Informasi Pengiriman",
prescriptionDeliveryDetailRecipientName: "Nama Penerima",
prescriptionDeliveryView: "Detail Status",
prescriptionDownload: "Unduh Resep",
prescriptionClaim: "Proses Klaim",
prescriptionPatient: "Nama Pasien",
prescriptionPayment: "Informasi Pembayaran",
orderInfo: "Informasi Pesanan",
prescriptionPaymentMedicine: "Total Biaya Obat",
prescriptionPaymentDelivery: "Total Biaya Pengiriman",
prescriptionPaymentTotal: "Total Harga",
prescriptionPaymentDownload: "Unduh Invoice",
prescriptionRejectReason: "Alasan ditolak: {{reason}}",
prescriptionView: "Detail Pesanan",
prescriptionRedeem: "Tebus Resep",
prescriptionDetail: "Lihat Resep",
prescriptionOn: "{{date}}, Pukul {{time}}",
previous: "Sebelumnya",
registrationCertificate: "STR",
select: "Pilih",
sessionOn: "Sesi pada {{date}}",
skip: "Lewati",
status: "Status",
defaultStatusDelivery: "Status Pesanan: Resep Ditebus",
consultationFor: "Pemeriksaan Untuk",
day: "hari",
week: "minggu",
month: "bulan"
};
var id = {
localizations: localizations,
translations: translations
};
var internationalizations = {
id: {
date: {
prixa: id.localizations.date
},
prixa: id.translations,
time: {
prixa: id.localizations.time
}
}
};
var CHANGE_CLIENT_ID = "CHANGE_CLIENT_ID";
function saveClientId(clientId) {
return {
clientId: clientId,
type: CHANGE_CLIENT_ID
};
}
var initState = {
clientId: ""
};
function appConfig(state, action) {
if (state === void 0) {
state = initState;
}
switch (action.type) {
case CHANGE_CLIENT_ID:
return _extends({}, state, {
clientId: action.clientId
});
default:
return state;
}
}
var CHANGE_INTRO_SLIDES = "CHANGE_INTRO_SLIDES";
function changeIntroSlides(introSlides) {
return {
introSlides: introSlides,
type: CHANGE_INTRO_SLIDES
};
}
function introSlides(state, action) {
if (state === void 0) {
state = [];
}
switch (action.type) {
case CHANGE_INTRO_SLIDES:
return action.introSlides.map(function (introSlide, index) {
return _extends({
key: index.toString()
}, introSlide);
});
default:
return state;
}
}
var dynamicColors = {
darkerPrimary: "#0056B3",
darkestPrimary: "#1F4166",
lighterPrimary: "#4695EA",
lightestPrimary: "#E5F2FF",
primary: "#006FE6"
};
var CHANGE_THEME_COLORS = "CHANGE_THEME_COLORS";
function changeThemeColors(themeColors) {
return {
themeColors: themeColors,
type: CHANGE_THEME_COLORS
};
}
function themeColors(state, action) {
if (state === void 0) {
state = dynamicColors;
}
switch (action.type) {
case CHANGE_THEME_COLORS:
return _extends({}, state, action.themeColors);
default:
return state;
}
}
var CHANGE_TOKEN = "CHANGE_TOKEN";
var CHANGE_ACCESS_TOKEN = "CHANGE_ACCESS_TOKEN";
var CHANGE_FCM_TOKEN = "CHANGE_FCM_TOKEN";
var CHANGE_JWT_TOKEN = "CHANGE_JWT_TOKEN";
var RESET_TOKEN_STORE = "RESET_TOKEN_STORE";
function changeFcmToken(fcmToken) {
return {
fcmToken: fcmToken,
type: CHANGE_FCM_TOKEN
};
}
function changeToken(token) {
return {
token: token,
type: CHANGE_TOKEN
};
}
function changeAccessToken(accessToken) {
return {
accessToken: accessToken,
type: CHANGE_ACCESS_TOKEN
};
}
function resetTokenStore() {
return {
type: RESET_TOKEN_STORE
};
}
function token(state, action) {
if (state === void 0) {
state = null;
}
switch (action.type) {
case CHANGE_TOKEN:
return _extends({}, state, {
token: action.token
});
case CHANGE_ACCESS_TOKEN:
return _extends({}, state, {
accessToken: action.accessToken
});
case CHANGE_FCM_TOKEN:
return _extends({}, state, {
fcmToken: action.fcmToken
});
case CHANGE_JWT_TOKEN:
return _extends({}, state, {
jwt: action.jwt
});
case RESET_TOKEN_STORE:
return {};
default:
return state;
}
}
var reducers = redux.combineReducers({
appConfig: appConfig,
introSlides: introSlides,
themeColors: themeColors,
token: token
});
var store = redux.createStore(reducers);
var fonts = reactNative.Platform.OS === 'android' ? {
bold: {
fontFamily: "OpenSans-Bold"
},
light: {
fontFamily: "OpenSans-Light"
},
regular: {
fontFamily: "OpenSans-Regular"
}
} : {
bold: {
fontWeight: "700"
},
light: {
fontWeight: "300"
},
regular: {
fontWeight: "400"
}
};
var REACTIONS$1 = [{
label: "Sangat Buruk",
src: require("../assets/1a.png"),
bigSrc: require("../assets/1.png")
}, {
label: "Buruk",
src: require("../assets/2a.png"),
bigSrc: require("../assets/2.png")
}, {
label: "Baik",
src: require("../assets/3a.png"),
bigSrc: require("../assets/3.png")
}, {
label: "Sangat Baik",
src: require("../assets/4a.png"),
bigSrc: require("../assets/4.png")
}];
var WIDTH = 320;
var DISTANCE = WIDTH / REACTIONS$1.length;
var END = WIDTH - DISTANCE;
var EmojiRating = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(EmojiRating, _React$Component);
function EmojiRating(props) {
var _this;
_this = _React$Component.call(this, props) || this;
var s = _this.props.selected ? _this.props.selected.key : 2;
_this._pan = new reactNative.Animated.Value(s * DISTANCE);
_this.state = {
selected: _this.props.selected
};
return _this;
}
var _proto = EmojiRating.prototype;
_proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {
var _this2 = this;
this._panResponder = reactNative.PanResponder.create({
onMoveShouldSetResponderCapture: function onMoveShouldSetResponderCapture() {
return true;
},
onMoveShouldSetPanResponderCapture: function onMoveShouldSetPanResponderCapture() {
return true;
},
onPanResponderGrant: function onPanResponderGrant(e, gestureState) {
_this2._pan.setOffset(_this2._pan._value);
_this2._pan.setValue(0);
},
onPanResponderMove: reactNative.Animated.event([null, {
dx: this._pan
}]),
onPanResponderRelease: function onPanResponderRelease() {
_this2._pan.flattenOffset();
var offset = Math.max(0, _this2._pan._value + 0);
if (offset < 0) return _this2._pan.setValue(0);
if (offset >= END) {
_this2.updatePan(END);
return _this2._pan.setValue(offset);
}
var modulo = offset % DISTANCE;
offset = modulo >= DISTANCE / 2 ? offset + (DISTANCE - modulo) : offset - modulo;
_this2.updatePan(offset);
}
});
};
_proto.updatePan = function updatePan(toValue) {
this.setState({
selected: {
key: toValue / DISTANCE,
value: REACTIONS$1[toValue / DISTANCE].label
}
});
this.props.onSelected({
key: toValue / DISTANCE,
value: REACTIONS$1[toValue / DISTANCE].label
});
reactNative.Animated.spring(this._pan, {
toValue: toValue,
friction: 7
}).start();
};
_proto.render = function render() {
var _this3 = this;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$z.container
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$z.wrap
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$z.line
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$z.reactions
}, REACTIONS$1.map(function (reaction, idx) {
var u = idx * DISTANCE;
var inputRange = [u - 20, u, u + 20];
var scaleOutputRange = [1, 0.25, 1];
var topOutputRange = [0, 10, 0];
var colorOutputRange = ["#999", "#222", "#999"];
if (u - 20 < 0) {
inputRange = [u, u + 20];
scaleOutputRange = [0.25, 1];
topOutputRange = [10, 0];
colorOutputRange = ["#222", "#999"];
}
if (u + 20 > END) {
inputRange = [u - 20, u];
scaleOutputRange = [1, 0.25];
topOutputRange = [0, 10];
colorOutputRange = ["#999", "#222"];
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this3.updatePan(u);
},
activeOpacity: 0.9,
key: idx
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$z.smileyWrap
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Animated.Image, {
source: reaction.src,
style: [styles$z.smiley, {
transform: [{
scale: _this3.state.selected ? _this3._pan.interpolate({
inputRange: inputRange,
outputRange: scaleOutputRange,
extrapolate: "clamp"
}) : 1
}]
}]
})), /*#__PURE__*/React__default['default'].createElement(reactNative.Animated.Text, {
style: [styles$z.reactionText, {
top: _this3.state.selected ? _this3._pan.interpolate({
inputRange: inputRange,
outputRange: topOutputRange,
extrapolate: "clamp"
}) : 0,
color: _this3.state.selected ? _this3._pan.interpolate({
inputRange: inputRange,
outputRange: colorOutputRange,
extrapolate: "clamp"
}) : "#999"
}]
}, reaction.label));
}), this.state.selected && /*#__PURE__*/React__default['default'].createElement(reactNative.Animated.View, _extends({}, this._panResponder.panHandlers, {
style: [styles$z.bigSmiley, {
transform: [{
translateX: this._pan.interpolate({
inputRange: [0, END],
outputRange: [0, END],
extrapolate: "clamp"
})
}]
}]
}), REACTIONS$1.map(function (reaction, idx) {
var inputRange = [(idx - 1) * DISTANCE, idx * DISTANCE, (idx + 1) * DISTANCE];
var outputRange = [0, 1, 0];
if (idx == 0) {
inputRange = [idx * DISTANCE, (idx + 1) * DISTANCE];
outputRange = [1, 0];
}
if (idx == REACTIONS$1.length - 1) {
inputRange = [(idx - 1) * DISTANCE, idx * DISTANCE];
outputRange = [0, 1];
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.Animated.Image, {
key: idx,
source: reaction.bigSrc,
style: [styles$z.bigSmileyImage, {
opacity: _this3._pan.interpolate({
inputRange: inputRange,
outputRange: outputRange,
extrapolate: "clamp"
})
}]
});
})))));
};
return EmojiRating;
}(React__default['default'].Component);
var size = 42;
var styles$z = reactNative.StyleSheet.create({
container: {
justifyContent: "center",
alignItems: "center",
backgroundColor: "transparent",
marginTop: 30
},
wrap: {
width: WIDTH
},
welcome: _extends({
fontSize: 18,
textAlign: "center",
color: "#777"
}, fonts.light, {
marginBottom: 50
}),
reactions: {
flexDirection: "row",
justifyContent: "space-between",
backgroundColor: "transparent"
},
smileyWrap: {
width: DISTANCE,
height: DISTANCE,
justifyContent: "center",
alignItems: "center"
},
smiley: {
width: size,
height: size,
borderRadius: size / 2,
backgroundColor: "#c7ced3"
},
bigSmiley: {
width: DISTANCE,
height: DISTANCE,
borderRadius: DISTANCE / 2,
backgroundColor: "#ffb18d",
position: "absolute",
top: 0,
left: 0
},
bigSmileyImage: {
width: DISTANCE,
height: DISTANCE,
position: "absolute",
top: 0,
left: 0
},
reactionText: _extends({
fontSize: 12,
textAlign: "center",
color: "#999"
}, fonts.light, {
marginTop: 5
}),
line: {
height: 4 / reactNative.PixelRatio.get(),
backgroundColor: "#eee",
width: WIDTH - (DISTANCE - size),
left: (DISTANCE - size) / 2,
top: DISTANCE / 2 + 2 / reactNative.PixelRatio.get()
}
});
var styles$y = reactNative.StyleSheet.create({
button: {
alignItems: "center",
flexDirection: "row",
paddingHorizontal: 16,
paddingVertical: 16
},
container: {
paddingVertical: 24
},
text: _extends({}, fonts.bold, {
fontSize: 16
})
});
var Header = /*#__PURE__*/function (_Component) {
_inheritsLoose(Header, _Component);
function Header() {
return _Component.apply(this, arguments) || this;
}
var _proto = Header.prototype;
_proto.render = function render() {
var color = "#FFF";
var iconStart = /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/round_navigate_before_white.png")
});
var justifyContent = "flex-start";
return /*#__PURE__*/React__default['default'].createElement(reactNative.SafeAreaView, {
style: styles$y.container
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: this.props.onPress
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$y.button, {
justifyContent: justifyContent
}]
}, iconStart, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$y.text, {
color: color
}]
}, this.props.text))));
};
return Header;
}(React.Component);
var Pulse = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(Pulse, _React$Component);
function Pulse(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_this.value = new reactNative.Animated.Value(0);
return _this;
}
var _proto = Pulse.prototype;
_proto.componentDidMount = function componentDidMount() {
var delay = this.props.delay;
reactNative.Animated.sequence([reactNative.Animated.delay(delay), reactNative.Animated.loop(reactNative.Animated.timing(this.value, {
duration: 3600,
toValue: 1,
useNativeDriver: true
}))]).start();
};
_proto.render = function render() {
var themeColors = this.props.themeColors;
return /*#__PURE__*/React__default['default'].createElement(reactNative.Animated.View, {
style: [styles$x.pulse, {
backgroundColor: themeColors.lightestPrimary,
opacity: this.value.interpolate({
inputRange: [0, 1],
outputRange: [1, 0]
}),
transform: [{
scale: this.value.interpolate({
inputRange: [0, 1],
outputRange: [1, 3]
})
}]
}]
});
};
return Pulse;
}(React__default['default'].Component);
_defineProperty(Pulse, "propTypes", {
delay: PropTypes__default['default'].number.isRequired
});
var styles$x = reactNative.StyleSheet.create({
pulse: {
borderRadius: 150,
height: 100,
position: "absolute",
width: 100
}
});
var Pulse$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(Pulse);
var PulseLoader = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PulseLoader, _React$Component);
function PulseLoader() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PulseLoader.prototype;
_proto.render = function render() {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$w.container
}, Array.from({
length: 4
}).map(function (ignored, index) {
return /*#__PURE__*/React__default['default'].createElement(Pulse$1, {
delay: index * 900,
key: index
});
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/avatars/doctor.png"),
style: styles$w.image
}));
};
return PulseLoader;
}(React__default['default'].Component);
var styles$w = reactNative.StyleSheet.create({
container: {
alignItems: "center",
height: 300,
justifyContent: "center"
},
image: {
borderRadius: 50,
height: 100,
width: 100
}
});
var STATIC_CARD_NUMBERS = ["parents", "partner", "children"];
var DependencyDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DependencyDetail, _React$Component);
function DependencyDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DependencyDetail.prototype;
_proto.render = function render() {
var _this$props = this.props,
cardNumber = _this$props.cardNumber,
fullName = _this$props.fullName,
themeColors = _this$props.themeColors;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
numberOfLines: 1,
style: [styles$v.fullName, {
color: themeColors.darkerPrimary
}]
}, fullName), !STATIC_CARD_NUMBERS.includes(cardNumber) && /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$v.cardNumber, {
color: themeColors.darkestPrimary
}]
}, cardNumber));
};
return DependencyDetail;
}(React__default['default'].Component);
_defineProperty(DependencyDetail, "propTypes", {
cardNumber: PropTypes__default['default'].string.isRequired,
fullName: PropTypes__default['default'].string.isRequired
});
var styles$v = reactNative.StyleSheet.create({
cardNumber: _extends({
fontSize: 16
}, fonts.regular),
fullName: _extends({
fontSize: 20
}, fonts.bold)
});
var DependencyDetail$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(DependencyDetail);
var AVATARS$1 = {
f: [require("../assets/avatars/girl/1.png"), require("../assets/avatars/girl/2.png"), require("../assets/avatars/girl/3.png"), require("../assets/avatars/girl/4.png"), require("../assets/avatars/girl/5.png"), require("../assets/avatars/girl/6.png"), require("../assets/avatars/girl/7.png"), require("../assets/avatars/girl/8.png"), require("../assets/avatars/girl/9.png"), require("../assets/avatars/girl/10.png"), require("../assets/avatars/girl/11.png"), require("../assets/avatars/girl/12.png"), require("../assets/avatars/girl/13.png"), require("../assets/avatars/girl/14.png"), require("../assets/avatars/girl/15.png"), require("../assets/avatars/girl/16.png"), require("../assets/avatars/girl/17.png"), require("../assets/avatars/girl/18.png"), require("../assets/avatars/girl/19.png"), require("../assets/avatars/girl/20.png"), require("../assets/avatars/girl/21.png"), require("../assets/avatars/girl/22.png"), require("../assets/avatars/girl/23.png"), require("../assets/avatars/girl/24.png"), require("../assets/avatars/girl/25.png"), require("../assets/avatars/girl/26.png"), require("../assets/avatars/girl/27.png")],
m: [require("../assets/avatars/boy/1.png"), require("../assets/avatars/boy/2.png"), require("../assets/avatars/boy/3.png"), require("../assets/avatars/boy/4.png"), require("../assets/avatars/boy/5.png"), require("../assets/avatars/boy/6.png"), require("../assets/avatars/boy/7.png"), require("../assets/avatars/boy/8.png"), require("../assets/avatars/boy/9.png"), require("../assets/avatars/boy/10.png"), require("../assets/avatars/boy/11.png"), require("../assets/avatars/boy/12.png"), require("../assets/avatars/boy/13.png"), require("../assets/avatars/boy/14.png"), require("../assets/avatars/boy/15.png"), require("../assets/avatars/boy/16.png"), require("../assets/avatars/boy/17.png"), require("../assets/avatars/boy/18.png"), require("../assets/avatars/boy/19.png"), require("../assets/avatars/boy/20.png"), require("../assets/avatars/boy/21.png"), require("../assets/avatars/boy/22.png"), require("../assets/avatars/boy/23.png")]
};
var STATIC_AVATARS = {
parents: require("../assets/avatars/parents.png"),
partner: require("../assets/avatars/partner.png"),
children: require("../assets/avatars/children.png")
};
var DependencyAvatar = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DependencyAvatar, _React$Component);
function DependencyAvatar() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "state", {
avatarImg: null
});
return _this;
}
var _proto = DependencyAvatar.prototype;
_proto.selectAvatar = function selectAvatar() {
var _this$props = this.props,
cardNumber = _this$props.cardNumber,
gender = _this$props.gender;
var isStatic = STATIC_CARD_NUMBERS.includes(cardNumber);
if (isStatic) {
this.setState({
avatarImg: STATIC_AVATARS[cardNumber]
});
} else {
var seed = cardNumber.split("").reduce(function (currentSeed, c) {
return (currentSeed + c.charCodeAt(0)) % AVATARS$1[gender].length;
}, 0);
this.setState({
avatarImg: AVATARS$1[gender][seed]
});
}
};
_proto.componentDidMount = function componentDidMount() {
this.selectAvatar();
};
_proto.render = function render() {
var _this$props2 = this.props;
_this$props2.cardNumber;
_this$props2.gender;
var themeColors = _this$props2.themeColors;
var avatarImg = this.state.avatarImg;
return /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: avatarImg,
style: [styles$u.avatar, {
backgroundColor: themeColors.lightestPrimary
}]
});
};
return DependencyAvatar;
}(React__default['default'].Component);
_defineProperty(DependencyAvatar, "propTypes", {
cardNumber: PropTypes__default['default'].string.isRequired,
gender: PropTypes__default['default'].oneOf(["f", "m", ""]).isRequired
});
var styles$u = reactNative.StyleSheet.create({
avatar: {
borderRadius: 30,
height: 60,
width: 60
}
});
var DependencyAvatar$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(DependencyAvatar);
var DependencyAvatarWithDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DependencyAvatarWithDetail, _React$Component);
function DependencyAvatarWithDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DependencyAvatarWithDetail.prototype;
_proto.render = function render() {
var _this$props = this.props,
cardNumber = _this$props.cardNumber,
fullName = _this$props.fullName,
gender = _this$props.gender;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$t.container
}, /*#__PURE__*/React__default['default'].createElement(DependencyAvatar$1, {
cardNumber: cardNumber,
gender: gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$t.detailContainer
}, /*#__PURE__*/React__default['default'].createElement(DependencyDetail$1, {
cardNumber: cardNumber,
fullName: fullName
})));
};
return DependencyAvatarWithDetail;
}(React__default['default'].Component);
_defineProperty(DependencyAvatarWithDetail, "propTypes", {
cardNumber: PropTypes__default['default'].string.isRequired,
fullName: PropTypes__default['default'].string.isRequired,
gender: PropTypes__default['default'].oneOf(["f", "m", ""]).isRequired
});
var styles$t = reactNative.StyleSheet.create({
container: {
alignItems: "center",
flexDirection: "row",
flexGrow: 1,
padding: 10,
paddingEnd: 100,
width: 0
},
detailContainer: {
marginStart: 15
}
});
var staticColors = {
cavernous: "#515151",
forestFern: "#5DBE66",
grey: "#808080",
thimbleberry: "#E64F4F",
white: "#FFFFFF",
red: "#B80F0A"
};
var DependencyItem = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DependencyItem, _React$Component);
function DependencyItem() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DependencyItem.prototype;
_proto.render = function render() {
var _this$props = this.props,
fullName = _this$props.fullName,
cardNumber = _this$props.cardNumber,
gender = _this$props.gender,
onSelect = _this$props.onSelect;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$s.container
}, /*#__PURE__*/React__default['default'].createElement(DependencyAvatarWithDetail, {
fullName: fullName,
cardNumber: cardNumber,
gender: gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
onSelect(cardNumber);
},
style: styles$s.selectButton
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$s.selectText
}, I18n__default['default'].t("prixa.select"))));
};
return DependencyItem;
}(React__default['default'].Component);
_defineProperty(DependencyItem, "propTypes", {
fullName: PropTypes__default['default'].string.isRequired,
cardNumber: PropTypes__default['default'].string.isRequired,
gender: PropTypes__default['default'].oneOf(["f", "m", ""]).isRequired,
onSelect: PropTypes__default['default'].func.isRequired
});
var styles$s = reactNative.StyleSheet.create({
container: {
alignItems: "center",
flex: 1,
flexDirection: "row"
},
selectButton: {
backgroundColor: staticColors.forestFern,
borderRadius: 20,
margin: 10,
paddingHorizontal: 20,
paddingVertical: 5
},
selectText: _extends({
color: staticColors.white,
fontSize: 18
}, fonts.regular)
});
var styles$r = reactNative.StyleSheet.create({
text: _extends({}, fonts.regular, {
fontSize: 15,
textAlign: "center",
paddingTop: 50,
marginHorizontal: 15,
paddingBottom: 50
})
});
var DependencyList = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DependencyList, _React$Component);
function DependencyList() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "renderItem", function (_ref) {
var fullName = _ref.fullName,
cardNumber = _ref.cardNumber,
gender = _ref.gender,
hasDoB = _ref.hasDoB;
var _onSelect = _this.props.onSelect;
return /*#__PURE__*/React__default['default'].createElement(DependencyItem, {
fullName: fullName,
cardNumber: cardNumber,
gender: gender,
onSelect: function onSelect() {
_onSelect(cardNumber, fullName, hasDoB);
}
});
});
return _this;
}
var _proto = DependencyList.prototype;
_proto.render = function render() {
var _this2 = this;
var data = this.props.data;
return data.length > 0 ? /*#__PURE__*/React__default['default'].createElement(reactNative.FlatList, {
data: data,
keyExtractor: function keyExtractor(item) {
return item.cardNumber;
},
renderItem: function renderItem(_ref2) {
var item = _ref2.item;
return _this2.renderItem(item);
}
}) : /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$r.text
}, I18n__default['default'].t("prixa.dependencyNotAvailable")));
};
return DependencyList;
}(React__default['default'].Component);
_defineProperty(DependencyList, "propTypes", {
data: PropTypes__default['default'].array.isRequired,
onSelect: PropTypes__default['default'].func.isRequired
});
var activeConsultation = null;
function setConsultation(consultation) {
activeConsultation = consultation;
}
function getConsultation() {
return activeConsultation;
}
var medical = null;
function setMedical(height, weight) {
if (height && weight) {
medical = {
height: height,
weight: weight
};
} else {
medical = null;
}
}
function getMedical() {
return medical;
}
var baseUrl = null;
var prixaEngineBaseUrl = null;
var apiKey = null;
var partnerAppId = null;
var partnerId = null;
var voximplantAccountName = null;
var voximplantAppName = null;
var APP_BASE_URL = null; // export const BAYMAX_WIDGET_URL = "https://poc-widget.netlify.app";
var BAYMAX_WIDGET_URL = null;
function setDevMode(devMode) {
if (devMode) {
APP_BASE_URL = "https://dev.api.core.prixa.ai/api";
BAYMAX_WIDGET_URL = "https://dev.baymaxwidget.prixa.ai";
baseUrl = "https://dev.api.core.prixa.ai/api/v1/";
prixaEngineBaseUrl = "https://dev.api.core.prixa.ai/api/v1/nalar/";
apiKey = "WZQRQzxN6bDxkwb8Lr7b2liEIM5E22JY";
partnerAppId = "e58b641d-5714-45d0-9453-af17f805dc74";
partnerId = "2255079e-752b-486d-886b-c00be708b6a1";
voximplantAccountName = "prixa";
voximplantAppName = "test";
} else {
APP_BASE_URL = "https://api.core.prixa.ai/api";
BAYMAX_WIDGET_URL = "https://baymaxwidget.prixa.ai";
baseUrl = "https://api.core.prixa.ai/api/v1/";
prixaEngineBaseUrl = "https://api.core.prixa.ai/api/v1/nalar/";
apiKey = "WZQRQzxN6bDxkwb8Lr7b2liEIM5E22JY";
partnerAppId = "e58b641d-5714-45d0-9453-af17f805dc74";
partnerId = "2255079e-752b-486d-886b-c00be708b6a1";
voximplantAccountName = "prixa";
voximplantAppName = "main";
}
}
function getBaseUrl() {
return baseUrl;
}
function getPrixaEngine() {
return {
prixaEngineBaseUrl: prixaEngineBaseUrl,
apiKey: apiKey,
partnerAppId: partnerAppId,
partnerId: partnerId
};
}
function getVoximplantAccountName() {
return voximplantAccountName;
}
function getVoximplantAppName() {
return voximplantAppName;
} // source: https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return "";
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
var API = axios__default['default'].create({
baseURL: APP_BASE_URL
});
API.interceptors.request.use(function (config) {
// Do something before request is sent
var _store$getState = store.getState(),
accessToken = _store$getState.token.accessToken;
if (accessToken && config.url !== APP_BASE_URL + "/v2/profile/token") config.headers.Authorization = "Bearer " + accessToken;
return config;
}, function (error) {
return Promise.reject(error);
});
var isAlreadyFetchingAccessToken = false;
var isAlreadyReturnGlobalError = false;
var subscribers = [];
function onAccessTokenFetched(access_token) {
subscribers = subscribers.filter(function (callback) {
return callback(access_token);
});
}
function addSubscriber(callback) {
subscribers.push(callback); // add request queue
}
var bypassRefresh = function bypassRefresh(originalRequest) {
if (originalRequest.url.includes("v1/users/refresh") || originalRequest.url.includes("/login") || originalRequest.method === "delete") {
return true;
}
return false;
}; // intercept if token expired,then extend
API.interceptors.response.use(function (response) {
return response;
}, function (error) {
if (!error || !error.response) {
if (!isAlreadyReturnGlobalError) {
isAlreadyReturnGlobalError = true;
setTimeout(function () {
isAlreadyReturnGlobalError = false;
}, 10000);
}
}
var config = error.config,
status = error.response.status;
var originalRequest = config;
if (status === 401 && originalRequest.method !== "delete" && !bypassRefresh(originalRequest)) {
console.log("try reauth");
if (!isAlreadyFetchingAccessToken) {
isAlreadyFetchingAccessToken = true;
console.log("reauth processing");
API.post(APP_BASE_URL + "/v2/profile/token", {}, {
headers: {
Authorization: "Bearer " + store.getState().token.token
}
}).then(function (_ref) {
var _ref$data = _ref.data,
access_token = _ref$data.access_token,
metadata = _ref$data.metadata;
isAlreadyFetchingAccessToken = false;
var newTokenBearer = "Bearer " + access_token;
var newAccessToken = access_token;
console.log("reauth success, save new token");
store.dispatch(changeAccessToken(newAccessToken));
store.dispatch(saveClientId(metadata.client_id));
API.defaults.headers.Authorization = "Bearer " + newAccessToken;
originalRequest.headers.Authorization = newTokenBearer;
onAccessTokenFetched(newAccessToken);
})["catch"](function (error) {
console.log((error == null ? void 0 : error.response) || error);
reactNative.Alert.alert("Gagal Login", "Terjadi kesalahan sistem, mohon untuk mengulang proses beberapa saat lagi.", [{
text: "OK"
}], {
cancelable: false
});
});
}
var retryOriginalRequest = new Promise(function (resolve) {
addSubscriber(function (access_token) {
console.log("try request again");
store.dispatch(changeAccessToken(access_token));
originalRequest.headers.Authorization = "Bearer " + access_token;
resolve(axios__default['default'](originalRequest));
});
});
return retryOriginalRequest;
}
if (status === 429) {
return axios__default['default'](originalRequest);
}
return Promise.reject(error);
});
var styles$q = reactNative.StyleSheet.create({
container: {
flex: 1
},
contentContainer: {
paddingVertical: 30,
paddingHorizontal: 5,
backgroundColor: "#FFF",
borderTopEndRadius: 30,
borderTopStartRadius: 30
},
imageContainer: {
flex: 1,
justifyContent: "center",
alignItems: "center"
},
text: _extends({}, fonts.regular, {
fontSize: 22,
textAlign: "center",
marginTop: 10,
marginHorizontal: 15,
marginBottom: 30
})
});
var AskScreen$2 = /*#__PURE__*/function (_Component) {
_inheritsLoose(AskScreen, _Component);
function AskScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "_handlePress", function () {
_this.props.navigation.goBack();
});
_this.state = {
dependencies: [],
loading: false
};
return _this;
}
var _proto = AskScreen.prototype;
_proto.fetchDependencies = /*#__PURE__*/function () {
var _fetchDependencies = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var patientId, _yield$API$get, dependencyList;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
patientId = this.props.navigation.state.params.patientId;
_context.next = 4;
return API.get(APP_BASE_URL + "/v2/profile/" + patientId + "/dependencies");
case 4:
_yield$API$get = _context.sent;
dependencyList = _yield$API$get.data.data;
this.setState({
dependencies: dependencyList || ""
});
_context.next = 12;
break;
case 9:
_context.prev = 9;
_context.t0 = _context["catch"](0);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 12:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 9]]);
}));
function fetchDependencies() {
return _fetchDependencies.apply(this, arguments);
}
return fetchDependencies;
}();
_proto.setStaticData = function setStaticData() {
this.setState({
dependencies: [{
fullName: "Orang Tua",
cardNumber: "parents"
}, {
fullName: "Pasangan",
cardNumber: "partner"
}, {
fullName: "Anak",
cardNumber: "children"
}]
});
};
_proto.componentDidMount = /*#__PURE__*/function () {
var _componentDidMount = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
var _this$props$navigatio, config, dependenceStatus, dependencies;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_this$props$navigatio = this.props.navigation.state.params, config = _this$props$navigatio.config, dependenceStatus = _this$props$navigatio.dependenceStatus;
this.setState({
loading: true
});
_context2.prev = 2;
if (!((config == null ? void 0 : config.is_dependent_enabled) && !!dependenceStatus)) {
_context2.next = 10;
break;
}
_context2.next = 6;
return this.fetchDependencies();
case 6:
dependencies = this.state.dependencies;
if (dependencies.length === 0) {
this.setStaticData();
}
_context2.next = 11;
break;
case 10:
this.setStaticData();
case 11:
_context2.next = 16;
break;
case 13:
_context2.prev = 13;
_context2.t0 = _context2["catch"](2);
console.log("Dependency failed to fetch");
case 16:
this.setState({
loading: false
});
case 17:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[2, 13]]);
}));
function componentDidMount() {
return _componentDidMount.apply(this, arguments);
}
return componentDidMount;
}();
_proto.render = function render() {
var _this2 = this;
var loading = this.state.loading;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$q.container, {
backgroundColor: this.props.themeColors.primary
}]
}, /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: this._handlePress,
position: "start",
text: "Batal",
theme: "light"
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$q.imageContainer
}, /*#__PURE__*/React__default['default'].createElement(AutoHeightImage__default['default'], {
width: reactNative.Dimensions.get("window").width - 120,
source: require("../assets/illustrations/ask.png")
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$q.contentContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$q.text, {
color: this.props.themeColors.darkestPrimary
}]
}, "Untuk siapakah konsultasi ini?"), loading ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1,
justifyContent: "center",
paddingVertical: 50
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: this.props.themeColors.primary
})) : /*#__PURE__*/React__default['default'].createElement(DependencyList, {
data: this.state.dependencies.map(function (item) {
if (!!item["fullName"]) {
// from static data
return {
cardNumber: item.cardNumber,
fullName: item.fullName,
gender: "",
hasDoB: true
};
} else {
// from dynamic data
return {
cardNumber: item["card_number"],
fullName: item["first_name"] + " " + item["last_name"],
gender: item["gender"].toLowerCase(),
hasDoB: !!item.dob
};
}
}),
onSelect: function onSelect(cardNumber, fullName, hasDoB) {
console.log({
hasDoB: hasDoB
});
_this2.props.navigation.replace("Symptoms", _extends({}, _this2.props.navigation.state.params, {
policyNumber: cardNumber,
fullName: fullName,
hasDoB: hasDoB // patientId: this.props.navigation.state.params.patientId,
// hasViId: this.props.navigation.state.params.hasViId,
// enableVoiceCall: this.props.navigation.state.params
// .enableVoiceCall,
// enableVideoCall: this.props.navigation.state.params
// .enableVideoCall,
}));
}
})));
};
return AskScreen;
}(React.Component);
var ChildrenScreen = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(AskScreen$2);
var ConsentScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(ConsentScreen, _React$Component);
function ConsentScreen() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "state", {
isLoading: true,
consent: null
});
return _this;
}
var _proto = ConsentScreen.prototype;
_proto.fetchData = /*#__PURE__*/function () {
var _fetchData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _this$props$navigatio, patientId, clientId, _yield$API$get, inboxes, _yield$API$get2, consent, inbox;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_this$props$navigatio = this.props.navigation.state.params, patientId = _this$props$navigatio.patientId, clientId = _this$props$navigatio.clientId;
_context.next = 4;
return API.get(APP_BASE_URL + "/v1/clients/" + clientId + "/inboxes");
case 4:
_yield$API$get = _context.sent;
inboxes = _yield$API$get.data.data;
_context.next = 8;
return API.get(APP_BASE_URL + "/v2/profile/" + patientId + "/consent");
case 8:
_yield$API$get2 = _context.sent;
consent = _yield$API$get2.data.data;
// execption no inbox in baymax
if (inboxes.length === 0) reactNative.Alert.alert("Kesalahan", "Ada kesalahan pada sistem dokter, harap melaporkan hal ini ke pusat aduan."); // find DOKTER UMUM inbox
inbox = inboxes.find(function (_ref) {
var name = _ref.name;
return name.toUpperCase() === "DOKTER UMUM";
});
this.setState({
isLoading: false,
consent: consent,
inboxId: inbox.id || inboxes[0].id,
websiteToken: inbox.website_token || inboxes[0].website_token
});
_context.next = 18;
break;
case 15:
_context.prev = 15;
_context.t0 = _context["catch"](0);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 18:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 15]]);
}));
function fetchData() {
return _fetchData.apply(this, arguments);
}
return fetchData;
}();
_proto.componentDidMount = function componentDidMount() {
this.fetchData();
};
_proto.handleCancelPress = function handleCancelPress() {
this.props.navigation.goBack();
};
_proto.render = function render() {
var _this2 = this;
var themeColors = this.props.themeColors;
var content = null;
if (this.state.isLoading) {
content = /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: themeColors.primary
});
} else {
content = /*#__PURE__*/React__default['default'].createElement(Markdown__default['default'], {
style: markdownStyles
}, this.state.consent);
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$p.container, {
backgroundColor: themeColors.primary
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.SafeAreaView, null, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.handleCancelPress();
},
style: styles$p.cancelButton
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/round_arrow_back_ios_white_18dp.png")
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$p.cancelText
}, I18n__default['default'].t("prixa.cancel")))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexGrow: 1,
backgroundColor: themeColors.lightestPrimary,
borderTopEndRadius: 40,
borderTopStartRadius: 40
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, {
style: {
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 25
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
marginBottom: 5,
alignSelf: "center",
color: themeColors.darkestPrimary,
fontSize: 22
}, fonts.bold)
}, "Penjelasan dan Persetujuan"), content))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "white",
padding: 25,
flexDirection: "row",
justifyContent: "space-between"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
backgroundColor: "#E64F4F",
borderRadius: 20,
paddingVertical: 12,
paddingHorizontal: 48
},
onPress: function onPress() {
return _this2.props.navigation.goBack();
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: "white",
fontSize: 16
}, fonts.bold)
}, "Tolak")), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
backgroundColor: "#5DBE66",
borderRadius: 20,
paddingVertical: 12,
paddingHorizontal: 48
},
onPress: function onPress() {
if (_this2.state.inboxId && _this2.state.websiteToken && _this2.state.consent) {
_this2.props.navigation.replace("Waiting", _extends({}, _this2.props.navigation.state.params, {
inboxId: _this2.state.inboxId,
websiteToken: _this2.state.websiteToken // params passed {
// patientId,
// cardNumberDependency,
// consultation,
// complaintIds,
// duration,
// durationUnit,
// sympthomSummary,
// fullName,
// hasViId,
// enableVoiceCall,
// enableVideoCall,
// clientId,
// }
}));
} else reactNative.Alert.alert("Whoops", "Proses belum selesai, mohon tunggu beberapa saat lagi.");
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: "white",
fontSize: 16
}, fonts.bold)
}, "Setuju"))));
};
return ConsentScreen;
}(React__default['default'].Component);
var styles$p = reactNative.StyleSheet.create({
cancelButton: {
alignItems: "center",
flexDirection: "row",
padding: 15
},
cancelText: _extends({
color: staticColors.white,
fontSize: 16,
marginStart: 15
}, fonts.bold),
container: {
flex: 1
}
});
var markdownStyles = reactNative.StyleSheet.create({
text: {
textAlign: "justify"
},
heading: {
textAlign: "justify"
},
bullet_list: {
textAlign: "justify"
},
ordered_list: {
textAlign: "justify"
},
list_item: {
textAlign: "justify"
}
});
var ConsentScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(ConsentScreen);
var TimelineSection = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(TimelineSection, _React$Component);
function TimelineSection() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = TimelineSection.prototype;
_proto.render = function render() {
var _this$props = this.props,
date = _this$props.date,
themeColors = _this$props.themeColors;
return /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$o.section, {
color: themeColors.darkestPrimary
}]
}, I18n__default['default'].t("prixa.sessionOn", {
date: I18n__default['default'].l("date.prixa.default", date)
}));
};
return TimelineSection;
}(React__default['default'].Component);
_defineProperty(TimelineSection, "propTypes", {
date: PropTypes__default['default'].instanceOf(Date).isRequired
});
var styles$o = reactNative.StyleSheet.create({
section: _extends({
fontSize: 16
}, fonts.regular)
});
var TimelineSection$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(TimelineSection);
var AVATARS = {
f: [require("../assets/avatars/woman/1.png"), require("../assets/avatars/woman/2.png"), require("../assets/avatars/woman/3.png"), require("../assets/avatars/woman/4.png"), require("../assets/avatars/woman/5.png"), require("../assets/avatars/woman/6.png"), require("../assets/avatars/woman/7.png"), require("../assets/avatars/woman/8.png"), require("../assets/avatars/woman/9.png"), require("../assets/avatars/woman/10.png"), require("../assets/avatars/woman/11.png"), require("../assets/avatars/woman/12.png"), require("../assets/avatars/woman/13.png"), require("../assets/avatars/woman/14.png"), require("../assets/avatars/woman/15.png"), require("../assets/avatars/woman/16.png"), require("../assets/avatars/woman/17.png"), require("../assets/avatars/woman/18.png"), require("../assets/avatars/woman/19.png"), require("../assets/avatars/woman/20.png"), require("../assets/avatars/woman/21.png"), require("../assets/avatars/woman/22.png")],
m: [require("../assets/avatars/man/1.png"), require("../assets/avatars/man/2.png"), require("../assets/avatars/man/3.png"), require("../assets/avatars/man/4.png"), require("../assets/avatars/man/5.png"), require("../assets/avatars/man/6.png"), require("../assets/avatars/man/7.png"), require("../assets/avatars/man/8.png"), require("../assets/avatars/man/9.png"), require("../assets/avatars/man/10.png"), require("../assets/avatars/man/11.png"), require("../assets/avatars/man/12.png"), require("../assets/avatars/man/13.png"), require("../assets/avatars/man/14.png"), require("../assets/avatars/man/15.png"), require("../assets/avatars/man/16.png"), require("../assets/avatars/man/17.png"), require("../assets/avatars/man/18.png")]
};
var PatientAvatar = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PatientAvatar, _React$Component);
function PatientAvatar() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PatientAvatar.prototype;
_proto.render = function render() {
var _this$props = this.props,
cardNumber = _this$props.cardNumber,
gender = _this$props.gender,
themeColors = _this$props.themeColors;
var seed = cardNumber.split("").reduce(function (currentSeed, c) {
return (currentSeed + c.charCodeAt(0)) % AVATARS[gender].length;
}, 0);
return /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: AVATARS[gender][seed],
style: [styles$n.avatar, {
backgroundColor: themeColors.lightestPrimary
}]
});
};
return PatientAvatar;
}(React__default['default'].Component);
_defineProperty(PatientAvatar, "propTypes", {
cardNumber: PropTypes__default['default'].string.isRequired,
gender: PropTypes__default['default'].oneOf(["f", "m"]).isRequired
});
var styles$n = reactNative.StyleSheet.create({
avatar: {
borderRadius: 30,
height: 60,
width: 60
}
});
var PatientAvatar$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PatientAvatar);
var PatientDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PatientDetail, _React$Component);
function PatientDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PatientDetail.prototype;
_proto.render = function render() {
var _this$props = this.props;
_this$props.cardNumber;
var fullName = _this$props.fullName;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$m.fullName
}, fullName));
};
return PatientDetail;
}(React__default['default'].Component);
_defineProperty(PatientDetail, "propTypes", {
cardNumber: PropTypes__default['default'].string.isRequired,
fullName: PropTypes__default['default'].string.isRequired
});
var styles$m = reactNative.StyleSheet.create({
cardNumber: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.light),
fullName: _extends({
color: staticColors.white,
fontSize: 20
}, fonts.regular)
});
var PatientAvatarWithDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PatientAvatarWithDetail, _React$Component);
function PatientAvatarWithDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PatientAvatarWithDetail.prototype;
_proto.render = function render() {
var _this$props = this.props,
cardNumber = _this$props.cardNumber,
fullName = _this$props.fullName,
gender = _this$props.gender;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$l.container
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatar$1, {
cardNumber: cardNumber,
gender: gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$l.detailContainer
}, /*#__PURE__*/React__default['default'].createElement(PatientDetail, {
cardNumber: cardNumber,
fullName: fullName
})));
};
return PatientAvatarWithDetail;
}(React__default['default'].Component);
_defineProperty(PatientAvatarWithDetail, "propTypes", {
cardNumber: PropTypes__default['default'].string.isRequired,
fullName: PropTypes__default['default'].string.isRequired,
gender: PropTypes__default['default'].oneOf(["f", "m"]).isRequired
});
var styles$l = reactNative.StyleSheet.create({
container: {
alignItems: "center",
flexDirection: "row",
flexGrow: 1
},
detailContainer: {
marginStart: 15
}
});
var PatientField = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PatientField, _React$Component);
function PatientField() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PatientField.prototype;
_proto.render = function render() {
var _this$props = this.props,
containerStyle = _this$props.containerStyle,
editable = _this$props.editable,
label = _this$props.label,
onEditPress = _this$props.onEditPress,
themeColors = _this$props.themeColors,
value = _this$props.value;
var content = /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$k.container, containerStyle]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$k.label, {
color: themeColors.primary
}]
}, label.toUpperCase()), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
flexDirection: "row"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$k.value
}, value), editable && /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/baseline_edit_black_18dp.png"),
style: {
marginStart: 10
}
})));
if (editable) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onEditPress,
style: containerStyle
}, content);
} else {
return content;
}
};
return PatientField;
}(React__default['default'].Component);
_defineProperty(PatientField, "defaultProps", {
editable: false,
onEditPress: function onEditPress() {}
});
_defineProperty(PatientField, "propTypes", {
containerStyle: reactNative.ViewPropTypes.style,
editable: PropTypes__default['default'].bool,
label: PropTypes__default['default'].string.isRequired,
onEditPress: PropTypes__default['default'].func,
value: PropTypes__default['default'].string.isRequired
});
var styles$k = reactNative.StyleSheet.create({
container: {
padding: 5
},
label: _extends({
fontSize: 16
}, fonts.bold),
value: _extends({
color: staticColors.cavernous,
fontSize: 16
}, fonts.bold)
});
var PatientField$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PatientField);
var PatientDetailMore = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PatientDetailMore, _React$Component);
function PatientDetailMore() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PatientDetailMore.prototype;
_proto.render = function render() {
var _this$props = this.props,
gender = _this$props.gender,
height = _this$props.height,
onEditPress = _this$props.onEditPress,
weight = _this$props.weight;
var genders = {
f: I18n__default['default'].t("prixa.female"),
m: I18n__default['default'].t("prixa.male")
};
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$j.rowContainer
}, /*#__PURE__*/React__default['default'].createElement(PatientField$1, {
containerStyle: styles$j.halfWidth,
label: I18n__default['default'].t("prixa.gender"),
value: genders[gender]
}), /*#__PURE__*/React__default['default'].createElement(PatientField$1, {
containerStyle: styles$j.halfWidth,
label: I18n__default['default'].t("prixa.age"),
value: this.props.age === null || this.props.age === undefined ? '-' : this.props.age + " " + I18n__default['default'].t("prixa.ageText")
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$j.rowContainer
}, /*#__PURE__*/React__default['default'].createElement(PatientField$1, {
containerStyle: styles$j.halfWidth,
editable: true,
label: "Tinggi Badan",
onEditPress: onEditPress,
value: height ? height + " cm" : "-"
}), /*#__PURE__*/React__default['default'].createElement(PatientField$1, {
containerStyle: styles$j.halfWidth,
editable: true,
label: "Berat Badan",
onEditPress: onEditPress,
value: weight ? weight + " kg" : "-"
})));
};
return PatientDetailMore;
}(React__default['default'].Component);
_defineProperty(PatientDetailMore, "propTypes", {
"class": PropTypes__default['default'].string,
gender: PropTypes__default['default'].oneOf(["f", "m"]).isRequired,
height: PropTypes__default['default'].number,
onEditPress: PropTypes__default['default'].func,
organization: PropTypes__default['default'].string.isRequired,
weight: PropTypes__default['default'].number,
age: PropTypes__default['default'].number
});
var styles$j = reactNative.StyleSheet.create({
fullWidth: {
flex: 1
},
halfWidth: {
flex: 0.5
},
organization: _extends({
fontSize: 16,
marginBottom: 10,
textAlign: "center"
}, fonts.bold),
rowContainer: {
flexDirection: "row",
marginBottom: 10
}
});
var PatientDetailMore$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PatientDetailMore);
var DoctorAvatar = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DoctorAvatar, _React$Component);
function DoctorAvatar() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DoctorAvatar.prototype;
_proto.render = function render() {
var _this$props = this.props,
avatarUrl = _this$props.avatarUrl,
themeColors = _this$props.themeColors;
return /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: {
uri: avatarUrl
},
style: [styles$i.avatar, {
backgroundColor: themeColors.lightestPrimary
}]
});
};
return DoctorAvatar;
}(React__default['default'].Component);
_defineProperty(DoctorAvatar, "propTypes", {
avatarUrl: PropTypes__default['default'].string
});
var styles$i = reactNative.StyleSheet.create({
avatar: {
borderRadius: 15,
height: 30,
width: 30
}
});
var DoctorAvatar$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(DoctorAvatar);
var DoctorDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DoctorDetail, _React$Component);
function DoctorDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DoctorDetail.prototype;
_proto.render = function render() {
var _this$props = this.props,
fullName = _this$props.fullName,
specialities = _this$props.specialities,
themeColors = _this$props.themeColors;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$h.fullName
}, fullName), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$h.specialities, {
color: themeColors.lighterPrimary
}]
}, specialities));
};
return DoctorDetail;
}(React__default['default'].Component);
_defineProperty(DoctorDetail, "propTypes", {
fullName: PropTypes__default['default'].string.isRequired,
specialities: PropTypes__default['default'].string.isRequired
});
var styles$h = reactNative.StyleSheet.create({
fullName: _extends({
color: staticColors.cavernous,
fontSize: 14
}, fonts.bold),
specialities: _extends({
fontSize: 12
}, fonts.regular)
});
var DoctorDetail$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(DoctorDetail);
var DoctorAvatarWithDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DoctorAvatarWithDetail, _React$Component);
function DoctorAvatarWithDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DoctorAvatarWithDetail.prototype;
_proto.render = function render() {
var _this$props = this.props,
avatarUrl = _this$props.avatarUrl,
fullName = _this$props.fullName,
specialities = _this$props.specialities;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$g.container
}, /*#__PURE__*/React__default['default'].createElement(DoctorAvatar$1, {
avatarUrl: avatarUrl
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$g.detailContainer
}, /*#__PURE__*/React__default['default'].createElement(DoctorDetail$1, {
fullName: fullName,
specialities: specialities
})));
};
return DoctorAvatarWithDetail;
}(React__default['default'].Component);
_defineProperty(DoctorAvatarWithDetail, "propTypes", {
avatarUrl: PropTypes__default['default'].string,
fullName: PropTypes__default['default'].string.isRequired,
specialities: PropTypes__default['default'].string.isRequired
});
var styles$g = reactNative.StyleSheet.create({
container: {
alignItems: "center",
flexDirection: "row"
},
detailContainer: {
marginStart: 10
}
});
var TimelineItem = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(TimelineItem, _React$Component);
function TimelineItem() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = TimelineItem.prototype;
_proto.render = function render() {
var _this$props = this.props,
createdAt = _this$props.createdAt,
dependent = _this$props.dependent,
dependentStatus = _this$props.dependentStatus,
doctor = _this$props.doctor,
patientName = _this$props.patientName,
summary = _this$props.summary,
themeColors = _this$props.themeColors,
transactionDependency = _this$props.transactionDependency;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$f.createdAt, {
color: themeColors.darkestPrimary
}]
}, I18n__default['default'].l("time.prixa.default", createdAt)), /*#__PURE__*/React__default['default'].createElement(DoctorAvatarWithDetail, {
avatarUrl: doctor.avatarUrl,
fullName: doctor.fullName,
specialities: doctor.specialities
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, null, I18n__default['default'].t("prixa.consultationFor")), !!transactionDependency || !!dependentStatus ? /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$f.patient
}, dependentStatus ? dependent : transactionDependency.first_name + " " + transactionDependency.last_name) : /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$f.patient
}, patientName)), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$f.summary
}, summary));
};
return TimelineItem;
}(React__default['default'].Component);
_defineProperty(TimelineItem, "propTypes", {
createdAt: PropTypes__default['default'].instanceOf(Date).isRequired,
doctor: PropTypes__default['default'].shape({
avatarUrl: PropTypes__default['default'].string,
fullName: PropTypes__default['default'].string.isRequired,
specialities: PropTypes__default['default'].string.isRequired
}).isRequired,
summary: PropTypes__default['default'].string.isRequired,
patientName: PropTypes__default['default'].string.isRequired,
transactionDependency: PropTypes__default['default'].object,
dependentStatus: PropTypes__default['default'].number,
dependent: PropTypes__default['default'].string
});
var styles$f = reactNative.StyleSheet.create({
createdAt: _extends({
fontSize: 16,
marginBottom: 20
}, fonts.regular),
summary: _extends({
color: staticColors.grey,
fontSize: 12,
marginTop: 16,
textAlign: "justify"
}, fonts.regular),
patient: _extends({
fontSize: 14,
marginTop: 4,
textAlign: "justify"
}, fonts.bold)
});
var TimelineItem$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(TimelineItem);
var CustomerProfileScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(CustomerProfileScreen, _Component);
function CustomerProfileScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "_onPress", function () {
if (_this.state.medical) {
if (_this.state.activeConsultation) {
_this.props.navigation.navigate("Waiting", {
clientAppId: _this.state.clientAppId,
patientId: _this.state.id,
newPatientId: _this.state.newPatientId,
activeConsultation: _this.state.activeConsultation,
hasViId: _this.state.hasViId,
enableVoiceCall: _this.state.config.is_voice_call_enabled,
enableVideoCall: _this.state.config.is_video_call_enabled,
inboxId: _this.state.inboxId,
websiteToken: _this.state.websiteToken,
transactionId: _this.state.transactionId,
activeTransaction: _this.state.activeTransaction
});
} else {
_this.props.navigation.navigate("ask", {
clientAppId: _this.state.clientAppId,
patientId: _this.state.id,
newPatientId: _this.state.newPatientId,
firstName: _this.state.firstName,
config: _this.state.config,
dependenceStatus: _this.state.dependenceStatus,
hasViId: _this.state.hasViId,
enableVoiceCall: _this.state.config.is_voice_call_enabled,
enableVideoCall: _this.state.config.is_video_call_enabled,
clientId: _this.state.clientId,
hasDoB: _this.state.hasDoB
});
}
} else {
_this.props.navigation.navigate("Medical", {
patientId: _this.state.newPatientId,
birthdate: _this.state.birthdate,
cardNumber: _this.state.cardNumber,
fullName: _this.state.fullName,
gender: _this.state.gender,
age: _this.state.age,
height: null,
weight: null
});
}
});
_defineProperty(_assertThisInitialized(_this), "onHistoryPress", function () {
var _this$state = _this.state,
cardNumber = _this$state.cardNumber,
fullName = _this$state.fullName,
gender = _this$state.gender,
config = _this$state.config,
newPatientId = _this$state.newPatientId;
_this.props.navigation.navigate("PrescriptionHistory", {
cardNumber: cardNumber,
fullName: fullName,
gender: gender,
config: config,
patientId: newPatientId
});
});
_defineProperty(_assertThisInitialized(_this), "onMedicalCheckPress", function () {
_this.props.navigation.navigate("MedicalCheck", {
url: "https://dev.diagnosa.prixa.ai/partner/dc6d7de0-cb0b-11ea-aa8b-6521aef536d7/app/a65ff9f0-dac6-11ea-811b-b3b0a791cc9e",
patientId: _this.state.id
});
});
_this.state = {
firstName: "",
fullName: "",
cardNumber: "",
organization: "",
status: "",
"class": "",
age: 0,
gender: "m",
birthdate: new Date(),
phone: "",
email: "",
id: "",
dependenceStatus: "",
activeConsultation: null,
medical: null,
historiesTotal: 0,
historiesData: [],
isLoading: true,
symptomsCheckUrl: "",
loading: false,
config: {},
hasViId: false
};
return _this;
}
var _proto = CustomerProfileScreen.prototype;
_proto.checkLaunchStatus = function checkLaunchStatus() {
if (this.props.introSlides.length > 0) {
this.props.navigation.navigate("intro");
}
};
_proto.fetchProfile = /*#__PURE__*/function () {
var _fetchProfile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _mainPatient$config, _yield$API$get, profileData, _yield$API$get2, patientList, mainPatient, resp, _yield$API$get3, _yield$API$get3$data, consultationsHistories, consultationsHistoriesTotal, histories, lastDate, activeConsultation, age, roundedAge, checkActiveTransaction, activeTransaction, prevConsultationData, prevConsultation, isPrevConsultationActive;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
setConsultation(null);
this.setState({
loading: true
}); // ---------- new flow with external users ----------
// get external user data
_context.next = 5;
return API.get(APP_BASE_URL + "/v1/external/users/me", {
headers: {
"X-Client-Id": this.props.clientId
}
});
case 5:
_yield$API$get = _context.sent;
profileData = _yield$API$get.data;
_context.next = 9;
return API.get(APP_BASE_URL + "/v1/patients/user/" + profileData.id);
case 9:
_yield$API$get2 = _context.sent;
patientList = _yield$API$get2.data.data;
// find main patient (or main card holder)
mainPatient = patientList.find(function (patient) {
return patient.dependecy_status === "0";
}); // if no main patient in the list, get the first one
if (!mainPatient) mainPatient = patientList[0];
_context.next = 15;
return API.get(APP_BASE_URL + "/v2/profile/" + mainPatient.id + "/me");
case 15:
resp = _context.sent;
mainPatient = resp.data.data; // get list of consultation histories
_context.next = 19;
return API.get(APP_BASE_URL + "/v2/profile/" + mainPatient.id + "/consultation-history");
case 19:
_yield$API$get3 = _context.sent;
_yield$API$get3$data = _yield$API$get3.data;
consultationsHistories = _yield$API$get3$data.data;
consultationsHistoriesTotal = _yield$API$get3$data.total;
console.log({
profileData: profileData,
mainPatient: mainPatient,
patientList: patientList,
consultationsHistories: consultationsHistories
}); // prepare data for consultation histories
histories = [];
___default['default'].each(consultationsHistories, function (item) {
var n = moment__default['default'](item["created_at"]);
var date = n.format("D MMMM YYYY");
if (lastDate !== date) {
histories.push({
type: "section",
date: n.toDate(),
icon: require("../assets/round_access_time_white_18dp.png")
});
lastDate = date;
}
histories.push({
type: "single",
doctor: {
avatar: {
uri: item["doctor_photo"]
},
name: item["doctor_name"],
position: item["doctor_specialities"]
},
createdAt: n.toDate(),
description: item["trx_summary"] || item.detail_complaint,
prescriptionId: item["prescription_id"],
transactionDependency: item["transaction_dependency"],
dependentStatus: Number(item["dependent_status"]),
dependent: item["dependent"],
patientName: item["patient_name"]
});
});
activeConsultation = mainPatient.active_consultation;
setConsultation(activeConsultation); // set medical data from patient data
setMedical(mainPatient.patient_height, mainPatient.patient_weight);
age = mainPatient.patient_age; // to handle if age is null, then set age = null. otherwise, age might be 0.
roundedAge = age === null || age === undefined ? null : Math.floor(Number(age));
mainPatient.config.is_symptoms_check_enabled;
mainPatient.config.is_check_doctor_enabled;
// prepare check active transaction in all member
checkActiveTransaction = patientList.map(function (patient) {
return API.get(APP_BASE_URL + "/v2/consultations/patient/" + patient.id).then(function (resp) {
return resp.data.data;
});
}); // GET check active transaction in patient and family member
_context.next = 37;
return axios__default['default'].all(checkActiveTransaction).then(axios__default['default'].spread(function () {
for (var _len = arguments.length, transactions = new Array(_len), _key = 0; _key < _len; _key++) {
transactions[_key] = arguments[_key];
}
return transactions.find(function (trx) {
if (trx.length !== 0) {
console.log("you have one active transaction", trx);
return trx[0];
}
});
}));
case 37:
activeTransaction = _context.sent;
setConsultation(activeTransaction);
this.setState({
historiesData: histories,
historiesTotal: consultationsHistoriesTotal,
firstName: mainPatient.patient_f_name,
fullName: mainPatient.patient_f_name + " " + mainPatient.patient_l_name,
cardNumber: mainPatient.patient_card_number,
organization: mainPatient.patient_organization,
status: mainPatient.patient_vip_status ? "VIP" : "General",
"class": mainPatient.patient_class,
age: roundedAge,
gender: mainPatient.patient_gender,
birthdate: moment__default['default'](mainPatient.patient_dob).toDate(),
hasDoB: !!mainPatient.patient_dob,
phone: mainPatient.patient_phone,
email: mainPatient.patient_email,
id: mainPatient.id,
dependenceStatus: Number(mainPatient.dependence_status),
activeConsultation: getConsultation(),
medical: getMedical(),
isLoading: false,
symptomsCheckUrl: (_mainPatient$config = mainPatient.config) == null ? void 0 : _mainPatient$config.symptoms_check_url,
config: mainPatient.config,
hasViId: mainPatient.has_vi_id,
newPatientId: mainPatient.id,
clientId: profileData.client_id,
inboxId: (activeTransaction == null ? void 0 : activeTransaction.length) > 0 ? activeTransaction[0].inbox_id : null,
transactionId: (activeTransaction == null ? void 0 : activeTransaction.length) > 0 ? activeTransaction[0].transaction_id : null,
websiteToken: (activeTransaction == null ? void 0 : activeTransaction.length) > 0 ? activeTransaction[0].website_token : null,
activeTransaction: activeTransaction,
clientAppId: mainPatient.client_app_id
});
if (this.props.screenProps.intent) {
if (this.props.screenProps.intent.action === "text_message" && mainPatient.active_consultation) {
this.props.navigation.navigate("Waiting", {
patientId: this.state.id,
activeConsultation: this.state.activeConsultation
});
}
} else if (mainPatient.transaction_to_post_assess) {
this.props.navigation.navigate("PostAssessment", {
transaction: {
doctor: {
avatarUrl: mainPatient.transaction_to_post_assess.doctor.doctor_photo,
fullName: mainPatient.transaction_to_post_assess.doctor.octor_f_name + " " + mainPatient.transaction_to_post_assess.doctor.octor_l_name
},
startedAt: mainPatient.transaction_to_post_assess.consultation_chat_started_at,
summary: mainPatient.transaction_to_post_assess.trx_summary
}
});
} // check for previous active consultation on local storage
_context.next = 43;
return AsyncStorage__default['default'].getItem("active_consultation");
case 43:
prevConsultationData = _context.sent;
if (prevConsultationData) {
prevConsultation = JSON.parse(prevConsultationData); // check prev with current active consultation
isPrevConsultationActive = activeConsultation ? prevConsultation.trx_id === activeConsultation.trx_id && prevConsultation.room_id === activeConsultation.room_id : false;
if (!isPrevConsultationActive) {
// transfer to rating page if previous consulation is not the same as current active
this.props.navigation.navigate("Rating", {
transactionId: prevConsultation.trx_id,
agentAvatar: prevConsultation.avatar_url,
agentName: prevConsultation.username,
agentSpecialities: prevConsultation.email
});
}
}
this.setState({
loading: false
});
_context.next = 52;
break;
case 48:
_context.prev = 48;
_context.t0 = _context["catch"](0);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
this.props.screenProps.onClose();
case 52:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 48]]);
}));
function fetchProfile() {
return _fetchProfile.apply(this, arguments);
}
return fetchProfile;
}();
_proto.componentDidMount = /*#__PURE__*/function () {
var _componentDidMount = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
var _yield$API$post, _yield$API$post$data, access_token, metadata;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
this.checkLaunchStatus();
_context2.prev = 1;
_context2.next = 4;
return API.post(APP_BASE_URL + "/v2/profile/token", {}, {
headers: {
Authorization: "Bearer " + this.props.token
}
});
case 4:
_yield$API$post = _context2.sent;
_yield$API$post$data = _yield$API$post.data;
access_token = _yield$API$post$data.access_token;
metadata = _yield$API$post$data.metadata;
this.props.saveAccessToken(access_token);
this.props.saveClientId(metadata.client_id);
this.promise = this.fetchProfile();
_context2.next = 17;
break;
case 13:
_context2.prev = 13;
_context2.t0 = _context2["catch"](1);
console.log((_context2.t0 == null ? void 0 : _context2.t0.response) || _context2.t0);
this.props.screenProps.onClose();
case 17:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[1, 13]]);
}));
function componentDidMount() {
return _componentDidMount.apply(this, arguments);
}
return componentDidMount;
}();
_proto.render = function render() {
var _this2 = this;
if (this.state.isLoading) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1,
backgroundColor: this.props.themeColors.primary,
justifyContent: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: "#fff"
}));
}
var consultationHistoriesRender;
if (this.state.historiesTotal > 0) {
consultationHistoriesRender = /*#__PURE__*/React__default['default'].createElement(Timeline__default['default'], {
innerCircle: "icon",
circleColor: this.props.themeColors.lighterPrimary,
lineColor: this.props.themeColors.primary,
data: this.state.historiesData,
detailContainerStyle: {
marginTop: -13,
marginBottom: 13
},
listViewContainerStyle: {
marginLeft: 12,
marginRight: 32
},
renderDetail: function renderDetail(rowData, sectionID, rowID) {
if (rowData.type === "section") {
return /*#__PURE__*/React__default['default'].createElement(TimelineSection$1, {
date: rowData.date
});
} else {
return /*#__PURE__*/React__default['default'].createElement(TimelineItem$1, {
createdAt: rowData.createdAt,
doctor: {
avatarUrl: rowData.doctor.avatar.uri,
specialities: rowData.doctor.position,
fullName: rowData.doctor.name
},
summary: rowData.description || "",
transactionDependency: rowData.transactionDependency,
dependentStatus: rowData.dependentStatus,
dependent: rowData.dependent,
patientName: rowData.patientName
});
}
},
showTime: false
});
} else {
consultationHistoriesRender = null;
}
return /*#__PURE__*/React__default['default'].createElement(ParallaxScrollView__default['default'], {
ref: function ref(_ref2) {
_this2.scrollRef = _ref2;
},
backgroundColor: this.props.themeColors.primary,
parallaxHeaderHeight: 600,
refreshControl: /*#__PURE__*/React__default['default'].createElement(reactNative.RefreshControl, {
refreshing: this.state.loading,
onRefresh: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return _this2.fetchProfile();
case 2:
return _context3.abrupt("return", _context3.sent);
case 3:
case "end":
return _context3.stop();
}
}
}, _callee3);
}))
}),
renderForeground: function renderForeground() {
var _React$createElement;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: function onPress() {
_this2.props.resetTokenStore();
_this2.props.screenProps.onClose();
},
position: "start",
text: "Tutup",
theme: "light"
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
justifyContent: "center",
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(AutoHeightImage__default['default'], {
source: require("../assets/intro.png"),
width: reactNative.Dimensions.get("window").width - 140
})), _this2.state.config.is_check_doctor_enabled ? /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: _this2._onPress,
style: {
marginBottom: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 30,
backgroundColor: staticColors.forestFern
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: "#FFF",
width: 250,
textAlign: "center",
paddingVertical: 16
})
}, _this2.state.activeConsultation ? "LANJUT KONSULTASI" : "TANYA DOKTER"))) : null, _this2.state.config["is_prescription_claim_enabled"] ? /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, (_React$createElement = {
style: {
marginBottom: 16
},
onPress: _this2.onHistoryPress
}, _React$createElement["style"] = {
marginBottom: 16
}, _React$createElement), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 30,
backgroundColor: _this2.props.themeColors.darkestPrimary
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: "#FFF",
width: 250,
textAlign: "center",
paddingVertical: 16
})
}, "RIWAYAT RESEP"))) : null, _this2.state.config.is_symptoms_check_enabled ? /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: _this2.onMedicalCheckPress,
style: {
marginBottom: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 30,
backgroundColor: _this2.props.themeColors.lighterPrimary
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: "#FFF",
width: 250,
textAlign: "center",
paddingVertical: 16
})
}, "PERIKSA GEJALA"))) : null));
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: this.props.themeColors.primary
}
}, /*#__PURE__*/React__default['default'].createElement(reactNavigation.NavigationEvents, {
onDidFocus: function onDidFocus(payload) {
var consultation = getConsultation();
var medical = getMedical();
_this2.setState({
activeConsultation: consultation ? Object.assign({}, consultation) : null,
medical: medical ? Object.assign({}, medical) : null
});
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
alignItems: "center",
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatarWithDetail, {
cardNumber: this.state.cardNumber,
fullName: this.state.fullName,
gender: this.state.gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
marginStart: 20
},
onPress: function onPress() {
return _this2.scrollRef.scrollTo({
x: 0,
y: 500
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/baseline_keyboard_arrow_up_white_18dp.png")
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 30,
paddingTop: 15
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
width: 64,
height: 6,
borderRadius: 3,
marginBottom: 15,
opacity: 0.5,
backgroundColor: "#808080",
alignSelf: "center"
}
}), /*#__PURE__*/React__default['default'].createElement(PatientDetailMore$1, {
onEditPress: function onEditPress() {
_this2.props.navigation.navigate("Medical", {
patientId: _this2.state.newPatientId,
age: _this2.state.age,
cardNumber: _this2.state.cardNumber,
fullName: _this2.state.fullName,
gender: _this2.state.gender,
height: _this2.state.medical ? _this2.state.medical.height : null,
weight: _this2.state.medical ? _this2.state.medical.weight : null
});
},
"class": this.state["class"],
gender: this.state.gender,
height: this.state.medical ? this.state.medical.height : null,
organization: this.state.organization,
weight: this.state.medical ? this.state.medical.weight : null,
age: this.state.age
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#F1F1F1",
height: 1,
width: "100%",
marginBottom: 30
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: this.props.themeColors.darkestPrimary,
alignSelf: "center"
})
}, "RIWAYAT KONSULTASI"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 15
}, fonts.regular, {
color: this.props.themeColors.darkerPrimary,
alignSelf: "center",
marginBottom: 30
})
}, this.state.historiesTotal, " Konsultasi"), consultationHistoriesRender)));
};
return CustomerProfileScreen;
}(React.Component);
var mapDispatchToProps = function mapDispatchToProps(dispatch) {
return {
saveAccessToken: function saveAccessToken(accessToken) {
return dispatch(changeAccessToken(accessToken));
},
resetTokenStore: function resetTokenStore$1() {
return dispatch(resetTokenStore());
},
saveClientId: function saveClientId$1(clientId) {
return dispatch(saveClientId(clientId));
}
};
};
var CustomerProfileScreen$1 = reactRedux.connect(function (state) {
return {
introSlides: state.introSlides,
themeColors: state.themeColors,
token: state.token.token,
clientId: state.appConfig.clientId
};
}, mapDispatchToProps)(CustomerProfileScreen);
var injectJs = "const element = document.getElementsByClassName('prixa-menubar');" + "if(element.length > 0) { element[0].style.display = 'none'; }";
var MedicalCheck = /*#__PURE__*/function (_Component) {
_inheritsLoose(MedicalCheck, _Component);
function MedicalCheck() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _Component.call.apply(_Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "state", {
loading: true,
url: ""
});
_defineProperty(_assertThisInitialized(_this), "onNavigationStateChange", function (state) {
if (state.loading) {
_this.setState({
loading: true
});
} else {
_this.setState({
loading: false
});
}
var url = state.url;
if (String(url).indexOf("/consultation-start") >= 0) {
var sessionId = getParameterByName("sessionID", url);
_this.getConsultationDetails(sessionId);
}
});
_defineProperty(_assertThisInitialized(_this), "getConsultationDetails", /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(sessionId) {
var prixaEngine, rp, response, json, consultation, profiles, symptoms, histories, historyText, weight, height, bmiProfile, bmiStatus, mainSymptoms, mainSymptomsText, otherSymptoms, otherSymptomsText, noSymptoms, noymptomsText, unknownSymptoms, unknownSymptomsText, consultationText, navigation, param;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
prixaEngine = getPrixaEngine();
rp = fetch(prixaEngine.prixaEngineBaseUrl + "prixa", {
method: "POST",
headers: {
"x-prixa-api-key": prixaEngine.apiKey,
"x-partner-app-id": prixaEngine.partnerAppId,
"x-partner-id": prixaEngine.partnerId
},
body: JSON.stringify({
sessionId: sessionId,
reply: {
type: "resume"
}
})
});
_context.next = 4;
return rp;
case 4:
response = _context.sent;
_context.next = 7;
return response.json();
case 7:
json = _context.sent;
consultation = [];
profiles = ___default['default'].get(json.result, "actions.diagnosisResult.profiles", []);
symptoms = ___default['default'].get(json.result, "actions.diagnosisResult.symptoms", []);
___default['default'].get(json.result, "actions.diagnosisResult.diseases", []); // STATUS KESEHATAN DAN KEBIASAAN
consultation.push("STATUS KESEHATAN DAN KEBIASAAN");
histories = [];
if (profiles.length > 0) {
histories = ___default['default'].filter(profiles, function (profile) {
return profile.type === "history";
});
}
historyText = [];
___default['default'].forEach(histories, function (history) {
historyText.push("- " + history.nameIndo);
});
consultation.push(historyText.length > 0 ? historyText.join("\n") : "-");
consultation.push(""); // new line
// BMI
consultation.push("BMI");
weight = ___default['default'].get(json.result, "actions.diagnosisResult.user.weight", "-");
height = ___default['default'].get(json.result, "actions.diagnosisResult.user.height", "-");
bmiProfile = ___default['default'].find(profiles, function (profile) {
return profile.type === "bmi";
});
bmiStatus = bmiProfile ? bmiProfile.nameIndo : "-";
consultation.push("Tinggi: " + height + " cm | berat badan " + weight + " kg (" + bmiStatus + ")");
consultation.push(""); // new line
// KELUHAN UTAMA
mainSymptoms = [];
if (symptoms.length > 0) {
mainSymptoms = ___default['default'].filter(symptoms, function (symptom) {
return symptom.answer === "yes" && symptom.chief;
});
}
consultation.push("KELUHAN UTAMA");
mainSymptomsText = [];
___default['default'].forEach(mainSymptoms, function (symptom) {
mainSymptomsText.push(symptom.symptomName);
});
consultation.push(mainSymptomsText.length > 0 ? mainSymptomsText.join(", ") : "-");
consultation.push(""); // new line
// KELUHAN LAIN
otherSymptoms = [];
if (symptoms.length > 0) {
otherSymptoms = ___default['default'].filter(symptoms, function (symptom) {
return symptom.answer === "yes" && !symptom.chief;
});
}
consultation.push("KELUHAN LAIN");
otherSymptomsText = [];
___default['default'].forEach(otherSymptoms, function (symptom) {
otherSymptomsText.push("- " + symptom.symptomName);
});
consultation.push(otherSymptomsText.length > 0 ? otherSymptomsText.join("\n") : "-");
consultation.push(""); // new line
// TIDAK ADA KELUHAN
consultation.push("TIDAK ADA");
noSymptoms = [];
if (symptoms.length > 0) {
noSymptoms = ___default['default'].filter(symptoms, function (symptom) {
return symptom.answer === "no";
});
}
noymptomsText = [];
___default['default'].forEach(noSymptoms, function (symptom) {
noymptomsText.push("- " + symptom.symptomName);
});
consultation.push(noymptomsText.length > 0 ? noymptomsText.join("\n") : "-");
consultation.push(""); // new line
// TIDAK TAHU
unknownSymptoms = [];
if (symptoms.length > 0) {
unknownSymptoms = ___default['default'].filter(symptoms, function (symptom) {
return symptom.answer === "unknown";
});
}
consultation.push("TIDAK TAHU");
unknownSymptomsText = [];
___default['default'].forEach(unknownSymptoms, function (symptom) {
unknownSymptomsText.push("- " + symptom.symptomName);
});
consultation.push(unknownSymptomsText.length > 0 ? unknownSymptomsText.join("\n") : "-");
consultationText = consultation.join("\n");
navigation = _this.props.navigation;
param = {
patientId: navigation.state.params.patientId,
dependent: ___default['default'].get(navigation.state.params, "dependent", null),
consultation: consultationText,
complaintIds: [],
duration: 1,
durationUnit: "day"
};
_this.props.navigation.replace("Consent", param);
case 57:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}());
return _this;
}
var _proto = MedicalCheck.prototype;
_proto.componentDidMount = function componentDidMount() {
var url = this.props.navigation.state.params.url;
this.setState({
url: url
});
};
_proto.render = function render() {
var _this2 = this;
var _this$state = this.state,
loading = _this$state.loading,
url = _this$state.url;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$e.closeContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.props.navigation.goBack();
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/close.png"),
width: 25,
style: styles$e.icon
}))), url ? /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNativeWebview.WebView, {
onNavigationStateChange: this.onNavigationStateChange,
source: {
uri: url
},
style: {
flex: 1
},
originWhitelist: ["https://*"],
injectedJavaScript: injectJs
}), loading ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$e.activityIndicator
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
style: {
flex: 1
},
size: "large",
color: "#FFF"
})) : null) : null);
};
return MedicalCheck;
}(React.Component);
var styles$e = reactNative.StyleSheet.create({
closeContainer: {
padding: 16,
backgroundColor: staticColors.grey,
flexDirection: "row",
justifyContent: "flex-end"
},
icon: {
width: 25,
height: 25
},
activityIndicator: {
flex: 1,
position: "absolute",
width: "100%",
height: "100%",
marginTop: 40,
backgroundColor: staticColors.grey
}
});
var DoctorField = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DoctorField, _React$Component);
function DoctorField() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DoctorField.prototype;
_proto.render = function render() {
var _this$props = this.props,
label = _this$props.label,
themeColors = _this$props.themeColors,
value = _this$props.value;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$d.label, {
color: themeColors.primary
}]
}, label.toUpperCase()), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$d.value
}, value));
};
return DoctorField;
}(React__default['default'].Component);
_defineProperty(DoctorField, "propTypes", {
label: PropTypes__default['default'].string.isRequired,
value: PropTypes__default['default'].string.isRequired
});
var styles$d = reactNative.StyleSheet.create({
label: _extends({
fontSize: 15
}, fonts.bold),
value: _extends({
color: staticColors.grey,
fontSize: 15,
marginBottom: 25
}, fonts.regular)
});
var DoctorField$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(DoctorField);
var DoctorDetailMore = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(DoctorDetailMore, _React$Component);
function DoctorDetailMore() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = DoctorDetailMore.prototype;
_proto.render = function render() {
var _this$props = this.props,
education = _this$props.education,
hospital = _this$props.hospital,
practiceLicense = _this$props.practiceLicense,
registrationCertificate = _this$props.registrationCertificate;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$c.container
}, /*#__PURE__*/React__default['default'].createElement(DoctorField$1, {
label: I18n__default['default'].t("prixa.registrationCertificate"),
value: registrationCertificate
}), /*#__PURE__*/React__default['default'].createElement(DoctorField$1, {
label: I18n__default['default'].t("prixa.practiceLicense"),
value: practiceLicense
}), /*#__PURE__*/React__default['default'].createElement(DoctorField$1, {
label: I18n__default['default'].t("prixa.education"),
value: education
}), /*#__PURE__*/React__default['default'].createElement(DoctorField$1, {
label: I18n__default['default'].t("prixa.hospital"),
value: hospital
}));
};
return DoctorDetailMore;
}(React__default['default'].Component);
_defineProperty(DoctorDetailMore, "propTypes", {
education: PropTypes__default['default'].string.isRequired,
hospital: PropTypes__default['default'].string.isRequired,
practiceLicense: PropTypes__default['default'].string.isRequired,
registrationCertificate: PropTypes__default['default'].string.isRequired
});
var styles$c = reactNative.StyleSheet.create({
container: {
padding: 30
}
});
var _Dimensions$get$3 = reactNative.Dimensions.get("window"),
width$2 = _Dimensions$get$3.width;
var styles$b = reactNative.StyleSheet.create({
name: _extends({}, fonts.bold, {
fontSize: 20,
paddingHorizontal: 35,
color: "#FFF"
}),
position: _extends({}, fonts.regular, {
fontSize: 16,
paddingHorizontal: 35,
color: "#FFF"
}),
actionsContainer: {
padding: 25,
flexDirection: "row",
justifyContent: "center",
borderColor: "#F1F1F1",
borderBottomWidth: 1
},
container: {
backgroundColor: "#FFF",
borderTopEndRadius: 40,
borderTopStartRadius: 40,
flex: 1,
width: width$2,
marginTop: -40
},
action: {
height: 50,
width: 50,
borderRadius: 50,
marginHorizontal: 10,
alignItems: "center",
justifyContent: "center"
}
});
var DoctorProfileScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(DoctorProfileScreen, _Component);
function DoctorProfileScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "checkPermissionAndLaunchAudio", function () {
var _this$props$navigatio = _this.props.navigation.state.params,
hasViId = _this$props$navigatio.hasViId,
enableVoiceCall = _this$props$navigatio.enableVoiceCall;
if (hasViId && enableVoiceCall) {
if (reactNative.Platform.OS === "android") {
var permissions = [reactNative.PermissionsAndroid.PERMISSIONS.RECORD_AUDIO];
reactNative.PermissionsAndroid.requestMultiple(permissions).then(function (granted) {
var recordAudioGranted = granted["android.permission.RECORD_AUDIO"] === "granted";
if (recordAudioGranted) {
_this.goToAudioCallScreen();
}
});
} else {
_this.goToAudioCallScreen();
}
}
});
_defineProperty(_assertThisInitialized(_this), "checkPermissionAndLaunchVideo", function () {
var _this$props$navigatio2 = _this.props.navigation.state.params,
hasViId = _this$props$navigatio2.hasViId,
enableVideoCall = _this$props$navigatio2.enableVideoCall;
if (hasViId && enableVideoCall) {
if (reactNative.Platform.OS === "android") {
var permissions = [reactNative.PermissionsAndroid.PERMISSIONS.CAMERA, reactNative.PermissionsAndroid.PERMISSIONS.RECORD_AUDIO];
reactNative.PermissionsAndroid.requestMultiple(permissions).then(function (granted) {
var cameraGranted = granted["android.permission.CAMERA"] === "granted";
var recordAudioGranted = granted["android.permission.RECORD_AUDIO"] === "granted";
if (cameraGranted && recordAudioGranted) {
_this.goToVideoCallScreen();
}
});
} else {
_this.goToVideoCallScreen();
}
}
});
_defineProperty(_assertThisInitialized(_this), "navigateCall", function (callType) {
var navigation = _this.props.navigation;
navigation.navigate(callType, {
doctor: {
fullName: navigation.state.params.doctorFullname
},
patient: {
id: navigation.state.params.patientId
},
transaction: {
id: navigation.state.params.transactionId
}
});
});
_defineProperty(_assertThisInitialized(_this), "goToVideoCallScreen", function () {
_this.navigateCall("VideoCall");
});
_defineProperty(_assertThisInitialized(_this), "goToAudioCallScreen", function () {
_this.navigateCall("AudioCall");
});
_this.state = {
avatarUrl: "https://izi.medlinx.id/uploads/userfiles/test.png",
fullName: "",
specialities: "",
str: "",
sip: "",
education: "",
hospitalName: "",
hospitalAdress: "-"
};
return _this;
}
var _proto = DoctorProfileScreen.prototype;
_proto.componentDidMount = function componentDidMount() {
var _this2 = this;
var token = this.props.token;
fetch(getBaseUrl() + "consultations/doctor-info?trx_id=" + this.props.navigation.state.params.transactionId, {
headers: {
Authorization: "Bearer " + token,
Accept: "application/json",
"Content-Type": "application/json"
}
}).then(function (res) {
return res.json();
}).then(function (json) {
_this2.setState({
avatarUrl: json["data"]["doctor_photo"],
fullName: json["data"]["doctor_f_name"] + " " + json["data"]["doctor_l_name"],
specialities: json["data"]["speciality_name"].join(", "),
str: json["data"]["doctor_str"],
sip: json["data"]["doctor_sip"],
education: json["data"]["doctor_education"],
hospitalName: json["data"]["hospital_name"],
hospitalAdress: json["data"]["doctor_address"]
});
});
};
_proto.render = function render() {
var _this3 = this;
var _this$props$navigatio3 = this.props.navigation.state.params,
hasViId = _this$props$navigatio3.hasViId,
enableVoiceCall = _this$props$navigatio3.enableVoiceCall,
enableVideoCall = _this$props$navigatio3.enableVideoCall;
return /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, {
style: {
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(AutoHeightImage__default['default'], {
source: {
uri: this.state.avatarUrl
},
width: width$2
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
bottom: 0,
position: "absolute",
paddingBottom: 50,
paddingVertical: 10,
backgroundColor: this.props.themeColors.primary,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
left: 0,
right: 0
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$b.name
}, this.state.fullName), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$b.position
}, this.state.education))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$b.container
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$b.actionsContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this3.props.navigation.goBack();
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$b.action, {
backgroundColor: this.props.themeColors.primary
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/round_chat_bubble_white_18dp.png"),
style: {
height: 24,
width: 24
}
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: this.checkPermissionAndLaunchVideo
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$b.action, hasViId && enableVideoCall ? {
backgroundColor: this.props.themeColors.primary
} : {
backgroundColor: staticColors.grey
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/round_videocam_white_18dp.png"),
style: {
height: 28,
width: 28
}
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: this.checkPermissionAndLaunchAudio
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$b.action, hasViId && enableVoiceCall ? {
backgroundColor: this.props.themeColors.primary
} : {
backgroundColor: staticColors.grey
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/round_call_white_18dp.png"),
style: {
height: 26,
width: 26
}
})))), /*#__PURE__*/React__default['default'].createElement(DoctorDetailMore, {
education: this.state.education,
hospital: this.state.hospitalName,
practiceLicense: this.state.sip,
registrationCertificate: this.state.str
}))));
};
return DoctorProfileScreen;
}(React.Component);
var DoctorProfileScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors,
token: state.token
};
})(DoctorProfileScreen);
var MedicalScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(MedicalScreen, _React$Component);
function MedicalScreen(props) {
var _this;
_this = _React$Component.call(this, props) || this;
var _this$props$navigatio = _this.props.navigation.state.params,
height = _this$props$navigatio.height,
weight = _this$props$navigatio.weight;
var heightDecimal = height ? parseInt(height * 10) % 10 : null;
var heightInteger = height ? parseInt(height) : null;
var weightDecimal = weight ? parseInt(weight * 10) % 10 : null;
var weightInteger = weight ? parseInt(weight) : null;
_this.state = {
bmiContainerWidth: 0,
heightDecimal: heightDecimal,
heightInteger: heightInteger,
heightSelectorVisible: false,
temporaryHeightDecimal: null,
temporaryHeightInteger: null,
temporaryWeightDecimal: null,
temporaryWeightInteger: null,
weightDecimal: weightDecimal,
weightInteger: weightInteger,
weightSelectorVisible: false
};
return _this;
}
var _proto = MedicalScreen.prototype;
_proto.updateProfile = /*#__PURE__*/function () {
var _updateProfile = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _this$state, heightDecimal, heightInteger, weightDecimal, weightInteger, patient_height, patient_weight, _yield$API$patch, status;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_this$state = this.state, heightDecimal = _this$state.heightDecimal, heightInteger = _this$state.heightInteger, weightDecimal = _this$state.weightDecimal, weightInteger = _this$state.weightInteger;
patient_height = heightInteger + heightDecimal / 10;
patient_weight = weightInteger + weightDecimal / 10;
_context.prev = 3;
_context.next = 6;
return API.patch(APP_BASE_URL + "/v2/profile/me", {
patient_id: this.props.navigation.state.params.patientId,
patient_height: patient_height,
patient_weight: patient_weight
});
case 6:
_yield$API$patch = _context.sent;
status = _yield$API$patch.status;
if (status === 200) {
setMedical(patient_height, patient_weight);
this.props.navigation.goBack();
}
_context.next = 14;
break;
case 11:
_context.prev = 11;
_context.t0 = _context["catch"](3);
console.log(_context.t0 == null ? void 0 : _context.t0.response);
case 14:
case "end":
return _context.stop();
}
}
}, _callee, this, [[3, 11]]);
}));
function updateProfile() {
return _updateProfile.apply(this, arguments);
}
return updateProfile;
}();
_proto.render = function render() {
var _this2 = this;
var themeColors = this.props.themeColors;
var _this$props$navigatio2 = this.props.navigation.state.params,
cardNumber = _this$props$navigatio2.cardNumber,
fullName = _this$props$navigatio2.fullName,
gender = _this$props$navigatio2.gender,
age = _this$props$navigatio2.age;
var _this$state2 = this.state,
bmiContainerWidth = _this$state2.bmiContainerWidth,
heightDecimal = _this$state2.heightDecimal,
heightInteger = _this$state2.heightInteger,
heightSelectorVisible = _this$state2.heightSelectorVisible,
temporaryHeightDecimal = _this$state2.temporaryHeightDecimal,
temporaryHeightInteger = _this$state2.temporaryHeightInteger,
temporaryWeightDecimal = _this$state2.temporaryWeightDecimal,
temporaryWeightInteger = _this$state2.temporaryWeightInteger,
weightDecimal = _this$state2.weightDecimal,
weightInteger = _this$state2.weightInteger,
weightSelectorVisible = _this$state2.weightSelectorVisible;
var ageText = age === null || age === undefined ? "-" : age;
var genderName = gender === "m" ? "Laki-Laki" : "Perempuan";
var height = heightInteger + heightDecimal / 10;
var weight = weightInteger + weightDecimal / 10;
var bmiContainer = null;
if (height && weight) {
var bmi = Math.round(weight / Math.pow(height / 100, 2) * 10) / 10;
var normalizedBmi = bmi;
if (bmi < 13.5) {
normalizedBmi = 13.5;
}
if (bmi > 36.5) {
normalizedBmi = 36.5;
}
var color = null;
var description = null;
if (bmi >= 30) {
color = "#E64F4F";
description = "Kegemukan (Obesitas)";
} else if (bmi >= 25) {
color = "#FEA501";
description = "Kelebihan berat badan";
} else if (bmi >= 18.5) {
color = "#5DBE66";
description = "Normal (Ideal)";
} else {
color = "#4695EA";
description = "Kekurangan berat badan";
}
bmiContainer = /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
marginBottom: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: color,
fontSize: 18
}, fonts.bold)
}, bmi), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: color,
fontSize: 18
}, fonts.light)
}, " - "), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: color,
fontSize: 18
}, fonts.regular)
}, description)), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
onLayout: function onLayout(event) {
return _this2.setState({
bmiContainerWidth: event.nativeEvent.layout.width
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
height: 100
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#4695EA",
flex: 5,
justifyContent: "flex-end"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 12,
padding: 4
}, fonts.bold)
}, "Kurang")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#5DBE66",
flex: 6.5,
justifyContent: "flex-end"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 12,
padding: 4
}, fonts.bold)
}, "Ideal")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FEA501",
flex: 5,
justifyContent: "flex-end"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 12,
padding: 4
}, fonts.bold)
}, "Lebih")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#E64F4F",
flex: 6.5,
justifyContent: "flex-end"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 12,
padding: 4
}, fonts.bold)
}, "Obesitas"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
backgroundColor: staticColors.white,
borderRadius: 10,
height: 20,
left: bmiContainerWidth * (normalizedBmi - 13.5) / 23 - 10,
marginTop: 20,
position: "absolute",
width: 20
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 3.5
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
flex: 3,
textAlign: "center"
}, fonts.regular)
}, "18.5"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 3.5
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
flex: 3,
textAlign: "center"
}, fonts.regular)
}, "25"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 2
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
flex: 3,
textAlign: "center"
}, fonts.regular)
}, "30"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 5
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.updateProfile();
},
style: {
alignSelf: "center",
backgroundColor: "#5DBE66",
borderRadius: 20,
marginTop: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16,
paddingHorizontal: 30,
paddingVertical: 10
}, fonts.bold)
}, "Simpan")));
} else {
bmiContainer = /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 14
}, fonts.regular)
}, "Silakan lengkapi tinggi & berat badan terlebih dahulu");
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, {
style: {
backgroundColor: staticColors.white,
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: themeColors.primary
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
flexDirection: "row",
paddingHorizontal: 30,
paddingVertical: 15
}
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatar$1, {
cardNumber: cardNumber,
gender: gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24,
marginStart: 15
}, fonts.bold)
}, "Profil Medis")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
height: 40
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingHorizontal: 30
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 24
}, fonts.bold)
}, fullName), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 18,
marginBottom: 20
}, fonts.regular)
}, genderName + ", " + ageText + " Tahun"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 18
}, fonts.regular)
}, "Sebelum memulai, mohon untuk dapat melengkapi informasi berikut:"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 18,
marginTop: 20
}, fonts.bold)
}, "Tinggi Badan:"), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.setState({
heightSelectorVisible: true
});
},
style: {
alignItems: "center",
flexDirection: "row",
marginTop: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TextInput, {
editable: false,
placeholder: "Input tinggi badan",
style: {
backgroundColor: "#F1F1F1",
borderRadius: 10,
paddingHorizontal: 16,
paddingVertical: 8
},
value: height ? height + " cm" : ""
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/baseline_edit_black_18dp.png"),
style: {
marginStart: 10,
padding: 10
}
}), /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: heightSelectorVisible,
useNativeDriver: true
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderRadius: 40,
padding: 30
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
alignSelf: "center",
color: themeColors.darkestPrimary,
fontSize: 20,
marginBottom: 20
}, fonts.bold)
}, "Pilih Tinggi"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNativeWheelPickerAndroid.WheelPicker, {
data: ___default['default'].range(30, 251).map(function (i) {
return i.toString();
}),
initPosition: heightInteger ? heightInteger - 30 : 130,
onItemSelected: function onItemSelected(selectedItem) {
_this2.setState({
temporaryHeightInteger: selectedItem + 30
});
},
selectedItem: temporaryHeightInteger ? temporaryHeightInteger - 30 : heightInteger ? heightInteger - 30 : 130
}), /*#__PURE__*/React__default['default'].createElement(reactNativeWheelPickerAndroid.WheelPicker, {
data: ___default['default'].range(0, 10).map(function (i) {
return i.toString();
}),
initPosition: heightDecimal ? heightDecimal : 0,
onItemSelected: function onItemSelected(selectedItem) {
return _this2.setState({
temporaryHeightDecimal: selectedItem
});
},
selectedItem: temporaryHeightDecimal ? temporaryHeightDecimal : heightDecimal ? heightDecimal : 0,
style: {
width: 100
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
justifyContent: "space-between"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.setState({
heightSelectorVisible: false,
temporaryHeightDecimal: null,
temporaryHeightInteger: null
});
},
style: {
backgroundColor: "#E64F4F",
borderRadius: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16,
paddingHorizontal: 30,
paddingVertical: 10
}, fonts.bold)
}, "Batal")), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
var defaultHeightInteger = 160;
var defaultHeightDecimal = 0;
_this2.setState({
heightDecimal: temporaryHeightDecimal === 0 ? 0 : temporaryHeightDecimal || heightDecimal || defaultHeightDecimal,
heightInteger: temporaryHeightInteger || heightInteger || defaultHeightInteger,
heightSelectorVisible: false,
temporaryHeightDecimal: null,
temporaryHeightInteger: null
});
},
style: {
backgroundColor: "#5DBE66",
borderRadius: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16,
paddingHorizontal: 30,
paddingVertical: 10
}, fonts.bold)
}, "Pilih")))))), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 18,
marginTop: 20
}, fonts.bold)
}, "Berat Badan:"), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.setState({
weightSelectorVisible: true
});
},
style: {
alignItems: "center",
flexDirection: "row",
marginTop: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TextInput, {
editable: false,
placeholder: "Input berat badan",
style: {
backgroundColor: "#F1F1F1",
borderRadius: 10,
paddingHorizontal: 16,
paddingVertical: 8
},
value: weight ? weight + " kg" : ""
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/baseline_edit_black_18dp.png"),
style: {
marginStart: 10,
padding: 10
}
}), /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: weightSelectorVisible,
useNativeDriver: true
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderRadius: 40,
padding: 30
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
alignSelf: "center",
color: themeColors.darkestPrimary,
fontSize: 20,
marginBottom: 20
}, fonts.bold)
}, "Pilih Berat"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNativeWheelPickerAndroid.WheelPicker, {
data: ___default['default'].range(1, 251).map(function (i) {
return i.toString();
}),
initPosition: weightInteger ? weightInteger - 1 : 69,
onItemSelected: function onItemSelected(selectedItem) {
return _this2.setState({
temporaryWeightInteger: selectedItem + 1
});
},
selectedItem: temporaryWeightInteger ? temporaryWeightInteger - 1 : weightInteger ? weightInteger - 1 : 69
}), /*#__PURE__*/React__default['default'].createElement(reactNativeWheelPickerAndroid.WheelPicker, {
data: ___default['default'].range(0, 10).map(function (i) {
return i.toString();
}),
initPosition: weightDecimal ? weightDecimal : 0,
onItemSelected: function onItemSelected(selectedItem) {
return _this2.setState({
temporaryWeightDecimal: selectedItem
});
},
selectedItem: temporaryWeightDecimal ? temporaryWeightDecimal : weightDecimal ? weightDecimal : 0,
style: {
width: 100
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
justifyContent: "space-between"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
_this2.setState({
temporaryWeightDecimal: null,
temporaryWeightInteger: null,
weightSelectorVisible: false
});
},
style: {
backgroundColor: "#E64F4F",
borderRadius: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16,
paddingHorizontal: 30,
paddingVertical: 10
}, fonts.bold)
}, "Batal")), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
var defaultWeightDecimal = 0;
var defaultWeightInteger = 70;
_this2.setState({
temporaryWeightDecimal: null,
temporaryWeightInteger: null,
weightDecimal: temporaryWeightDecimal === 0 ? 0 : temporaryWeightDecimal || weightDecimal || defaultWeightDecimal,
weightInteger: temporaryWeightInteger || weightInteger || defaultWeightInteger,
weightSelectorVisible: false
});
},
style: {
backgroundColor: "#5DBE66",
borderRadius: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16,
paddingHorizontal: 30,
paddingVertical: 10
}, fonts.bold)
}, "Pilih")))))), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: themeColors.darkestPrimary,
fontSize: 18,
marginTop: 20
}, fonts.bold)
}, "BMI:"), bmiContainer));
};
return MedicalScreen;
}(React__default['default'].Component);
var MedicalScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(MedicalScreen);
var REACTIONS = [{
label: "Sangat Buruk",
src: require("../assets/1a.png"),
bigSrc: require("../assets/1.png")
}, {
label: "Buruk",
src: require("../assets/2a.png"),
bigSrc: require("../assets/2.png")
}, {
label: "Baik",
src: require("../assets/3a.png"),
bigSrc: require("../assets/3.png")
}, {
label: "Sangat Baik",
src: require("../assets/4a.png"),
bigSrc: require("../assets/4.png")
}];
var styles$a = reactNative.StyleSheet.create({
avatar: {
borderRadius: 30,
height: 60,
marginRight: 15,
width: 60
},
container: {
justifyContent: "center",
padding: 10
},
nameContainer: {
flex: 1,
flexWrap: "wrap",
flexDirection: "row",
justifyContent: "flex-start",
alignItems: "center"
},
name: _extends({
color: "#FFF"
}, fonts.regular, {
fontSize: 20
}),
position: _extends({
color: "#FFF"
}, fonts.light, {
fontSize: 16
}),
profile: {
alignItems: "center",
flexDirection: "row",
padding: 25
},
ratingContainer: {
alignItems: "center",
backgroundColor: "#FFF",
borderRadius: 40,
paddingVertical: 40
},
question: _extends({
color: "#808080"
}, fonts.regular, {
fontSize: 20,
textAlign: "center",
paddingHorizontal: 40
}),
selectedValue: _extends({}, fonts.bold, {
textTransform: "uppercase",
fontSize: 30,
marginTop: 30,
textAlign: "center"
}),
thanks: _extends({}, fonts.regular, {
fontSize: 20,
marginVertical: 10,
textAlign: "center",
paddingHorizontal: 10
}),
itemLabelContainer: {
flex: 1,
flexDirection: "row",
flexWrap: "wrap",
paddingHorizontal: 0
},
itemLabel: _extends({}, fonts.regular, {
fontSize: 12,
color: "#808080",
textAlign: "center"
}),
itemImage: {
borderRadius: 72 / 2,
height: 72,
width: 72
},
item: {
alignItems: "center",
flex: 0.3,
borderWidth: 1,
padding: 2,
margin: 2
},
itemContainer: {
marginTop: 10
},
input: _extends({}, fonts.regular, {
fontSize: 16,
marginTop: 50,
borderBottomColor: "#000000",
borderBottomWidth: 1,
paddingBottom: 5
}),
inputError: {
borderColor: "#FF0000",
borderWidth: 1,
borderBottomColor: "#FF0000"
},
button: _extends({
alignSelf: "center",
borderRadius: 20,
color: "#FFF"
}, fonts.bold, {
fontSize: 18,
backgroundColor: "#5DBE66",
paddingVertical: 10,
paddingHorizontal: 50,
marginTop: 40
}),
emoji: {
width: 120,
height: 120
}
});
var RatingScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(RatingScreen, _Component);
function RatingScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "_handleSelected", function (selection) {
_this.setState({
selectedRating: selection,
selectedCategories: {},
noteValid: true
});
});
_this.state = {
selectedRating: null,
submitted: false,
note: "",
categories: [],
selectedCategories: {},
noteValid: true
};
return _this;
}
var _proto = RatingScreen.prototype;
_proto.fetchRating = /*#__PURE__*/function () {
var _fetchRating = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _yield$API$get, categories;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
setConsultation(null);
_context.prev = 1;
_context.next = 4;
return API.get(APP_BASE_URL + "/v2/rating-feedbacks");
case 4:
_yield$API$get = _context.sent;
categories = _yield$API$get.data.data;
this.setState({
categories: categories
});
_context.next = 12;
break;
case 9:
_context.prev = 9;
_context.t0 = _context["catch"](1);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 12:
case "end":
return _context.stop();
}
}
}, _callee, this, [[1, 9]]);
}));
function fetchRating() {
return _fetchRating.apply(this, arguments);
}
return fetchRating;
}();
_proto.rate = /*#__PURE__*/function () {
var _rate = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return API.post(APP_BASE_URL + "/v2/consultations/doctor-rating", {
trx_id: this.props.navigation.state.params.transactionId,
rating_score: this.state.selectedRating.key + 1,
rating_notes: this.state.note,
feedbacks: Object.keys(this.state.selectedCategories)
});
case 3:
_context2.next = 5;
return AsyncStorage__default['default'].removeItem("active_consultation");
case 5:
this.setState({
submitted: true
});
_context2.next = 11;
break;
case 8:
_context2.prev = 8;
_context2.t0 = _context2["catch"](0);
console.log((_context2.t0 == null ? void 0 : _context2.t0.response) || _context2.t0);
case 11:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[0, 8]]);
}));
function rate() {
return _rate.apply(this, arguments);
}
return rate;
}();
_proto.componentDidMount = function componentDidMount() {
this.fetchRating();
};
_proto.componentWillUnmount = function componentWillUnmount() {
clearTimeout(this.closeTimeoutId);
};
_proto.render = function render() {
var _this2 = this;
var ratingContent;
var noteValid = this.state.noteValid;
if (this.state.submitted) {
ratingContent = /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
style: styles$a.emoji,
source: REACTIONS[this.state.selectedRating.key].bigSrc
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$a.selectedValue, {
color: this.props.themeColors.primary
}]
}, this.state.selectedRating.value), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.thanks
}, "Terima kasih atas feedback yang diberikan"));
} else {
var categories = ___default['default'].reject(this.state.categories, function (item) {
var filter;
if (_this2.state.selectedRating) {
if (_this2.state.selectedRating.key > 1) {
filter = "positive";
} else {
filter = "negative";
}
return item["feedback_category"] !== filter;
} else {
return true;
}
});
ratingContent = /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.question
}, "Bagaimana pengalaman konsultasi Anda"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingHorizontal: 30
}
}, /*#__PURE__*/React__default['default'].createElement(EmojiRating, {
onSelected: this._handleSelected,
selected: this.state.selectedRating
})), this.state.selectedRating && /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$a.selectedValue, {
color: this.props.themeColors.primary
}]
}, this.state.selectedRating.value), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.thanks
}, "Terima kasih, apa yang telah kami lakukan dengan", " ", this.state.selectedRating.value.toLowerCase(), "?"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$a.itemContainer
}, ___default['default'].chunk(categories, 3).map(function (chunk, index) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
key: index,
style: {
flexDirection: "row",
justifyContent: "center",
paddingVertical: 10
}
}, chunk.map(function (item) {
var customStyles = {
borderColor: "transparent"
};
if (_this2.state.selectedCategories[item["id"]]) {
customStyles = {
borderColor: "#5DBE66"
};
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: [styles$a.item, customStyles],
key: item["id"],
onPress: function onPress() {
var selectedCategories = Object.assign({}, _this2.state.selectedCategories);
if (selectedCategories[item["id"]]) {
selectedCategories[item["id"]] = !selectedCategories[item["id"]];
} else {
selectedCategories[item["id"]] = true;
}
_this2.setState({
selectedCategories: selectedCategories
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: {
uri: item["feedback_photo"]
},
style: [styles$a.itemImage, {
backgroundColor: _this2.props.themeColors.lightestPrimary
}]
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$a.itemLabelContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.itemLabel
}, item["feedback_name"])));
}));
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginHorizontal: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TextInput, {
style: [styles$a.input, noteValid ? {} : styles$a.inputError],
placeholder: "Catatan",
placeholderTextColor: "#808080",
onChangeText: function onChangeText(note) {
return _this2.setState({
note: note,
noteValid: true
});
},
value: this.state.note
})), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
// check required if rate <= 1
var _this2$state = _this2.state,
selectedRating = _this2$state.selectedRating,
note = _this2$state.note;
var currentRating = selectedRating.key;
var noteValid = true;
if (currentRating <= 1 && !note) {
noteValid = false;
}
_this2.setState({
noteValid: noteValid
}, function () {
var noteValid = _this2.state.noteValid;
if (!noteValid) {
return;
}
_this2.rate();
_this2.closeTimeoutId = setTimeout(function () {
return _this2.props.navigation.goBack();
}, 3000);
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.button
}, "Kirim"))));
}
var profile = /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$a.profile
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: this.props.navigation.state.params.agentAvatar ? {
uri: this.props.navigation.state.params.agentAvatar
} : require("../assets/avatars/doctor.png"),
style: styles$a.avatar
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$a.nameContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.name
}, this.props.navigation.state.params.agentName), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$a.position
}, this.props.navigation.state.params.agentSpecialities)), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return AsyncStorage__default['default'].removeItem("active_consultation");
case 2:
_this2.props.navigation.pop();
case 3:
case "end":
return _context3.stop();
}
}
}, _callee3);
}))
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginStart: 15,
backgroundColor: "#E64F4F",
borderRadius: 10,
paddingHorizontal: 10,
paddingVertical: 10,
borderColor: "#FFF",
borderWidth: 2
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/outline_close_white_24dp.png")
}))));
var rating = /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$a.ratingContainer
}, ratingContent);
if (this.state.submitted || !this.state.selectedRating) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: this.props.themeColors.primary,
flex: 1,
alignItems: "center",
justifyContent: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.SafeAreaView, {
style: styles$a.container
}, profile, rating));
} else {
return /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, {
style: {
backgroundColor: this.props.themeColors.primary,
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$a.container
}, profile, rating));
}
};
return RatingScreen;
}(React.Component);
var RatingScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(RatingScreen);
var SymptomsScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(SymptomsScreen, _Component);
function SymptomsScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "_renderHeader", function (section) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20,
borderTopColor: "#707070",
borderTopWidth: 1,
borderTopEndRadius: 20,
borderTopStartRadius: 20,
flexDirection: "row",
justifyContent: "center",
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: "#707070",
fontSize: 18
}, fonts.bold, {
flexGrow: 1
})
}, section.name), /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/round_keyboard_arrow_down_black_18dp.png")
}));
});
_defineProperty(_assertThisInitialized(_this), "_renderContent", function (section) {
var chunks = ___default['default'].chunk(section.items, 2);
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 5
}
}, chunks.map(function (chunk, index) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
key: index,
style: {
flexDirection: "row"
}
}, chunk.map(function (item) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
flex: 0.5
},
key: item["id"],
onPress: function onPress() {
_this.setState({
symptomsSimple: _this.state.symptomsSimple.map(function (a) {
return {
name: a.name,
items: a.items.map(function (b) {
return b["id"] === item["id"] ? Object.assign({}, b, {
selected: !b.selected
}) : b;
})
};
})
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 10,
margin: 10,
borderRadius: 20,
borderColor: item["selected"] ? "#5DBE66" : "#808080",
borderWidth: 2,
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: "#808080",
fontSize: 16
}, fonts.regular)
}, item["complaint_name"])));
}));
}));
});
_defineProperty(_assertThisInitialized(_this), "_updateSections", function (activeSections) {
_this.setState({
activeSections: activeSections
});
});
_defineProperty(_assertThisInitialized(_this), "onDatePickerChange", function (_event, selectedDate) {
var patientDob = selectedDate || _this.state.patientDob; // setShow(Platform.OS === "ios");
_this.setState({
patientDob: patientDob,
showDatePicker: false
});
});
_defineProperty(_assertThisInitialized(_this), "showDatePickerHandler", function () {
_this.setState({
showDatePicker: true
});
});
_defineProperty(_assertThisInitialized(_this), "formatDate", function (date) {
if (!date) return "Lengkapi Tanggal Lahir Anda";
return date.getDate() + "/" + (date.getMonth() + 1) + "/" + date.getFullYear();
});
_this.state = {
consultation: "",
duration: 0,
activeSections: [],
symptoms: [],
symptomsSimple: [],
selectedUnit: "day",
patientDob: "",
showDatePicker: false
};
return _this;
}
var _proto = SymptomsScreen.prototype;
_proto.fetchSymptoms = /*#__PURE__*/function () {
var _fetchSymptoms = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var _yield$API$get, symptoms;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return API.get(APP_BASE_URL + "/v2/info/complaints");
case 3:
_yield$API$get = _context.sent;
symptoms = _yield$API$get.data.data;
this.setState({
symptoms: symptoms,
symptomsSimple: ___default['default'].map(___default['default'].groupBy(symptoms, "complaint_group"), function (item, key) {
return {
name: key,
items: item.map(function (item) {
return Object.assign({}, item, {
selected: false
});
})
};
})
});
_context.next = 11;
break;
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](0);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 11:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 8]]);
}));
function fetchSymptoms() {
return _fetchSymptoms.apply(this, arguments);
}
return fetchSymptoms;
}();
_proto.componentDidMount = function componentDidMount() {
this.promise = this.fetchSymptoms();
};
_proto.render = function render() {
var _this2 = this;
var fm1 = ___default['default'].flatMap(this.state.symptomsSimple, function (item) {
return item.items;
});
var fm2 = ___default['default'].filter(fm1, function (item) {
return item.selected;
});
var fm3 = ___default['default'].map(fm2, function (item) {
return item["complaint_name"];
});
var fm4 = ___default['default'].map(fm2, function (item) {
return item["id"];
});
var symptomsSummary = fm3.join(", ");
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: this.props.themeColors.primary,
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, null, /*#__PURE__*/React__default['default'].createElement(reactNative.SafeAreaView, null, /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: function onPress() {
_this2.props.navigation.goBack();
},
position: "start",
text: "Batal",
theme: "light"
})), !this.props.navigation.state.params.hasDoB && /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20,
paddingTop: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: this.showDatePickerHandler
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 20,
paddingHorizontal: 20,
paddingVertical: 20,
backgroundColor: "#FFFFFF",
minHeight: 50
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
paddingHorizontal: 30,
fontSize: 18
}, fonts.bold, {
color: this.props.themeColors.darkestPrimary,
marginBottom: 10,
alignSelf: "center"
})
}, "Tanggal Lahir:"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: {
alignSelf: "center"
}
}, this.formatDate(this.state.patientDob))))), this.state.showDatePicker && /*#__PURE__*/React__default['default'].createElement(DateTimePicker__default['default'], {
testID: "dateTimePicker",
value: this.state.patientDob || new Date(),
mode: "date",
display: reactNative.Platform.select({
ios: "default",
android: "spinner"
}),
maximumDate: Date.parse(new Date()),
onChange: this.onDatePickerChange
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20,
paddingTop: 0
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableWithoutFeedback, {
onPress: function onPress() {
return _this2.inputRef.focus();
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 20,
paddingHorizontal: 20,
paddingVertical: 10,
backgroundColor: "#FFFFFF",
minHeight: 100
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TextInput, {
ref: function ref(_ref) {
_this2.inputRef = _ref;
},
value: this.state.consultation,
onChangeText: function onChangeText(value) {
return _this2.setState({
consultation: value
});
},
placeholder: "Tuliskan Keluhan Utama Anda",
multiline: true,
maxLength: 250,
textAlignVertical: "top"
})))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20,
paddingTop: 0
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingVertical: 20,
paddingHorizontal: 10,
backgroundColor: "#FFFFFF",
borderRadius: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
paddingHorizontal: 30,
fontSize: 18
}, fonts.bold, {
color: this.props.themeColors.darkestPrimary,
marginBottom: 10,
alignSelf: "center"
})
}, "Lama Keluhan:"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
paddingLeft: 20
}
}, /*#__PURE__*/React__default['default'].createElement(Slider__default['default'], {
style: {
flexGrow: 1,
alignSelf: "center"
},
onValueChange: function onValueChange(value) {
return _this2.setState({
duration: value
});
},
minimumTrackTintColor: this.props.themeColors.lighterPrimary,
maximumTrackTintColor: this.props.themeColors.lightestPrimary,
step: 1,
minimumValue: 0,
maximumValue: 13,
thumbTintColor: this.props.themeColors.darkerPrimary
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [{
marginStart: 20,
width: 100
}, reactNative.Platform.OS === "android" ? {
alignItems: "center"
} : null]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 27
}, fonts.bold, {
paddingHorizontal: 10,
color: this.props.themeColors.lighterPrimary
})
}, this.state.duration > 12 ? "12+" : this.state.duration), /*#__PURE__*/React__default['default'].createElement(PickerSelect__default['default'], {
onValueChange: function onValueChange(itemValue) {
_this2.setState({
selectedUnit: itemValue
});
},
useNativeAndroidPickerStyle: false,
items: [{
label: "Hari",
value: "day"
}, {
label: "Minggu",
value: "week"
}, {
label: "Bulan",
value: "month"
}],
style: {
inputIOS: {
fontSize: 16,
paddingVertical: 12,
paddingHorizontal: 10,
color: "black",
paddingRight: 30
},
inputAndroid: {
fontSize: 16,
paddingHorizontal: 10,
paddingVertical: 8,
color: "black",
paddingRight: 30
},
iconContainer: {
top: 10
}
},
placeholder: {},
Icon: function Icon() {
return /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
style: {
height: 24,
width: 24
},
source: require("../assets/round_keyboard_arrow_down_black_18dp.png")
});
}
}))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
marginHorizontal: 30,
color: "#FFFFFF",
fontSize: 18
}, fonts.bold, {
marginTop: 25,
alignSelf: "center"
})
}, "Keluhan Tambahan:"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
marginHorizontal: 30,
color: "#FFFFFF",
fontSize: 18
}, fonts.light, {
marginBottom: 25,
alignSelf: "center"
})
}, symptomsSummary || "-"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
marginHorizontal: 10,
borderRadius: 20,
marginBottom: 10
}
}, /*#__PURE__*/React__default['default'].createElement(Accordion__default['default'], {
touchableComponent: reactNative.TouchableOpacity,
sections: this.state.symptomsSimple,
activeSections: this.state.activeSections,
renderHeader: this._renderHeader,
renderContent: this._renderContent,
onChange: this._updateSections
}))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFFFFF"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "rgba(0, 0, 0, 0.16)",
height: 3,
width: reactNative.Dimensions.get("window").width
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
if (_this2.state.consultation.length === 0 || _this2.state.duration === 0 || !_this2.props.navigation.state.params.hasDoB && !_this2.state.patientDob) {
reactNative.Alert.alert("Kesalahan", "Isi " + (!_this2.props.navigation.state.params.hasDoB ? "tanggal lahir, keluhan, dan durasi" : "keluhan dan durasi") + " sejak kapan keluhan dirasakan sebelum memulai konsultasi dengan dokter.");
return;
}
_this2.props.navigation.replace("Consent", _extends({}, _this2.props.navigation.state.params, {
// params passed {
// patientId,
// fullName,
// hasViId,
// enableVoiceCall,
// enableVideoCall,
// clientId,
// }
cardNumberDependency: _this2.props.navigation.state.params ? _this2.props.navigation.state.params.policyNumber : null,
consultation: _this2.state.consultation,
symptomsSummary: symptomsSummary,
complaintIds: fm4,
duration: _this2.state.duration,
durationUnit: _this2.state.selectedUnit,
patientDob: _this2.state.patientDob
}));
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginBottom: 0,
paddingVertical: 10,
paddingHorizontal: 40,
backgroundColor: "#5DBE66",
borderRadius: 20,
alignSelf: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 16
}, fonts.bold, {
color: "#FFFFFF"
})
}, "Selanjutnya"))))));
};
return SymptomsScreen;
}(React.Component);
var SymptomsScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(SymptomsScreen);
var getDownloadPermissionAndroid = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var granted;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return reactNative.PermissionsAndroid.request(reactNative.PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE, {
title: "Image Download Permission",
message: "Your permission is required to save images to your device",
buttonNegative: "Cancel",
buttonPositive: "OK"
});
case 3:
granted = _context.sent;
if (!(granted === reactNative.PermissionsAndroid.RESULTS.GRANTED)) {
_context.next = 6;
break;
}
return _context.abrupt("return", true);
case 6:
reactNative.Alert.alert("Save remote Image", "Grant Me Permission to save Image", [{
text: "OK",
onPress: function onPress() {
return console.log("OK Pressed");
}
}], {
cancelable: false
});
_context.next = 12;
break;
case 9:
_context.prev = 9;
_context.t0 = _context["catch"](0);
reactNative.Alert.alert("Save remote Image", "Failed to save Image: " + _context.t0.message, [{
text: "OK",
onPress: function onPress() {
return console.log("OK Pressed");
}
}], {
cancelable: false
});
case 12:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 9]]);
}));
return function getDownloadPermissionAndroid() {
return _ref.apply(this, arguments);
};
}();
var savePrescription = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(url) {
var granted, dirs, splitted, fileName, blob, saveToDevice;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(reactNative.Platform.OS === "android")) {
_context2.next = 6;
break;
}
_context2.next = 3;
return getDownloadPermissionAndroid();
case 3:
granted = _context2.sent;
if (granted) {
_context2.next = 6;
break;
}
return _context2.abrupt("return");
case 6:
dirs = RNFetchBlob__default['default'].fs.dirs;
splitted = url.split("/");
fileName = splitted[splitted.length - 1].match("([^/?]*)");
_context2.prev = 9;
_context2.next = 12;
return RNFetchBlob__default['default'].config({
fileCache: true,
appendExt: "jpg",
path: dirs.PictureDir + "/" + fileName[0]
}).fetch("GET", encodeURI(url));
case 12:
blob = _context2.sent;
console.log("savePrescription", {
url: url,
blob: blob,
fileName: fileName
});
_context2.next = 16;
return CameraRoll__default['default'].save(blob.data, {
type: "photo",
album: "prescription"
});
case 16:
saveToDevice = _context2.sent;
console.log({
saveToDevice: saveToDevice
});
reactNative.Alert.alert("Simpan Resep", "Resep berhasil disimpan", [{
text: "OK",
onPress: function onPress() {
return console.log("OK Pressed");
}
}], {
cancelable: false
});
return _context2.abrupt("return", true);
case 22:
_context2.prev = 22;
_context2.t0 = _context2["catch"](9);
reactNative.Alert.alert("Simpan Resep", "Resep gagal disimpan. Error:" + _context2.t0, [{
text: "OK",
onPress: function onPress() {
return console.log("OK Pressed");
}
}], {
cancelable: false
});
return _context2.abrupt("return", false);
case 26:
case "end":
return _context2.stop();
}
}
}, _callee2, null, [[9, 22]]);
}));
return function savePrescription(_x) {
return _ref2.apply(this, arguments);
};
}();
var styles$9 = reactNative.StyleSheet.create({
container: {
flex: 1,
position: "absolute",
width: "100%",
height: "100%"
},
content: {
alignItems: "center",
flex: 1,
justifyContent: "center",
padding: 30
},
message: _extends({
color: "#FFF"
}, fonts.regular, {
fontSize: 20,
padding: 40,
paddingBottom: 10,
textAlign: "center"
}),
activityIndicator: {
flex: 1,
position: "absolute",
width: "100%",
height: "100%",
backgroundColor: staticColors.grey
}
});
var WaitingScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(WaitingScreen, _Component);
function WaitingScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "onCancel", function () {
_this.clearRoom(_this.state.temporaryRoom);
});
_defineProperty(_assertThisInitialized(_this), "finishConsultation", function () {
_this.props.navigation.replace("Rating", {
transactionId: _this.state.room.transaction_id,
agentAvatar: _this.state.doctorInfo.doctor_photo,
agentName: _this.state.doctorInfo.doctor_f_name + " " + _this.state.doctorInfo.doctor_l_name,
agentSpecialities: _this.state.doctorInfo.specialities[0].speciality_desc
});
});
_defineProperty(_assertThisInitialized(_this), "onNavigationStateChange", function (state) {
if (state.loading) {
_this.setState({
loading: true
});
} else {
_this.setState({
loading: false
});
if (reactNative.Platform.OS === "android") {
var permissions = [reactNative.PermissionsAndroid.PERMISSIONS.CAMERA, reactNative.PermissionsAndroid.PERMISSIONS.RECORD_AUDIO];
reactNative.PermissionsAndroid.requestMultiple(permissions).then(function (granted) {
var cameraGranted = granted["android.permission.CAMERA"] === "granted";
var recordAudioGranted = granted["android.permission.RECORD_AUDIO"] === "granted";
console.log({
cameraGranted: cameraGranted,
recordAudioGranted: recordAudioGranted
});
});
}
}
});
_defineProperty(_assertThisInitialized(_this), "onMessage", function (event) {
var data = JSON.parse(event.nativeEvent.data); // console.log("onMessage", event, data);
if (data.event === "endChat") {
_this.finishConsultation();
setConsultation(null);
}
if (data.event === "download") savePrescription(data.data);
});
_defineProperty(_assertThisInitialized(_this), "navigateCall", function (callType) {
var navigation = _this.props.navigation;
var _this$state = _this.state,
agent = _this$state.agent,
room = _this$state.room;
navigation.navigate(callType, {
doctor: {
fullName: agent["username"]
},
patient: {
id: navigation.state.params.patientId
},
transaction: {
id: room["trx_id"]
}
});
});
_this.messageIds = new Set();
_this.messages = [];
_this.state = {
agentAvatar: "",
doctor: null,
room: null,
temporaryRoom: null,
isModalVisible: false,
agent: null,
messages: [],
time: 0,
loading: true
};
return _this;
}
var _proto = WaitingScreen.prototype;
_proto.createRoom = /*#__PURE__*/function () {
var _createRoom = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var responseData, isStatic, card_number_dependency, dependent, dependency_full_name, symptoms, _this$props$navigatio, patient_id, inbox_id, client_app_id, patientDob, hasDoB, payload, patient_dob, _yield$API$post, data;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
// console.log("start create room");
responseData = null;
isStatic = STATIC_CARD_NUMBERS.includes(this.props.navigation.state.params.cardNumberDependency);
card_number_dependency = !isStatic ? this.props.navigation.state.params.cardNumberDependency : undefined;
dependent = isStatic ? this.props.navigation.state.params.cardNumberDependency : undefined;
dependency_full_name = !isStatic ? this.props.navigation.state.params.fullName : undefined;
symptoms = {
complaint_id: this.props.navigation.state.params.complaintIds,
consultation: this.props.navigation.state.params.consultation,
duration: this.props.navigation.state.params.duration,
duration_unit: this.props.navigation.state.params.durationUnit
};
if (!this.props.navigation.state.params.activeTransaction) {
_context.next = 10;
break;
}
// console.log("resume transaction");
responseData = {
trx_id: this.props.navigation.state.params.transactionId,
patient_id: this.props.navigation.state.params.newPatientId
};
_context.next = 26;
break;
case 10:
// console.log("create new transaction");
_this$props$navigatio = this.props.navigation.state.params, patient_id = _this$props$navigatio.newPatientId, inbox_id = _this$props$navigatio.inboxId, client_app_id = _this$props$navigatio.clientAppId, patientDob = _this$props$navigatio.patientDob, hasDoB = _this$props$navigatio.hasDoB;
payload = {
inbox_id: inbox_id,
patient_id: patient_id,
client_app_id: client_app_id,
card_number_dependency: card_number_dependency,
dependent: dependent,
dependency_full_name: dependency_full_name,
symptoms: symptoms
};
patient_dob = patientDob ? patientDob.getFullYear() + "-" + (patientDob.getMonth() + 1) + "-" + patientDob.getDate() : null;
if (!hasDoB) payload["patient_dob"] = patient_dob;
_context.prev = 14;
_context.next = 17;
return API.post(APP_BASE_URL + "/v2/consultations/start", payload);
case 17:
_yield$API$post = _context.sent;
data = _yield$API$post.data.data;
responseData = _extends({}, data, {
patient_id: patient_id
});
_context.next = 26;
break;
case 22:
_context.prev = 22;
_context.t0 = _context["catch"](14);
reactNative.Alert.alert("Gagal", "Tidak berhasil menghubungkan dengan dokter, coba lagi beberapa saat lagi.");
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 26:
this.setState({
temporaryRoom: responseData
});
if (responseData) {
this.checkRoom(responseData);
}
case 28:
case "end":
return _context.stop();
}
}
}, _callee, this, [[14, 22]]);
}));
function createRoom() {
return _createRoom.apply(this, arguments);
}
return createRoom;
}();
_proto.sendMessage = function sendMessage(_ref) {
var website_token = _ref.website_token,
cw_token = _ref.cw_token;
var _this$props$navigatio2 = this.props.navigation.state.params,
consultation = _this$props$navigatio2.consultation,
duration = _this$props$navigatio2.duration,
durationUnit = _this$props$navigatio2.durationUnit,
symptomsSummary = _this$props$navigatio2.symptomsSummary,
cardNumberDependency = _this$props$navigatio2.cardNumberDependency,
fullName = _this$props$navigatio2.fullName;
var dependentMessage = "";
if (STATIC_CARD_NUMBERS.includes(cardNumberDependency)) {
dependentMessage = "Jenis Pasien: \"Tertanggung tidak terdaftar\"\n";
}
if (cardNumberDependency) {
dependentMessage = dependentMessage + ("Pemeriksaan untuk: " + fullName + "\n");
}
var durationUnitTi18n = I18n__default['default'].t("prixa." + durationUnit);
API.post(APP_BASE_URL + "/v1/widgets/messages?website_token=" + website_token + "&cw_conversation=" + cw_token, {
message: {
content: dependentMessage + "Keluhan Utama: " + consultation + "\n Lama keluhan: " + duration + " " + durationUnitTi18n + "\n Keluhan Tambahan: " + (symptomsSummary || "-") + "\n ",
timestamp: new Date().toString(),
"content-type": "text"
}
})["catch"](function (err) {
return console.log(err.response);
});
};
_proto.clearRoom = /*#__PURE__*/function () {
var _clearRoom = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(roomData) {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!roomData) {
_context2.next = 12;
break;
}
_context2.prev = 1;
_context2.next = 4;
return API.post(APP_BASE_URL + "/v2/consultations/cancel", {
trx_id: roomData.trx_id
});
case 4:
_context2.next = 6;
return API.post(APP_BASE_URL + "/v2/consultations/finish", {
trx_id: roomData.trx_id
});
case 6:
_context2.next = 11;
break;
case 8:
_context2.prev = 8;
_context2.t0 = _context2["catch"](1);
console.log(_context2.t0.response);
case 11:
reactNative.Alert.alert("Timeout", "Tidak ada dokter yang tersedia, silakan coba beberapa saat lagi.");
case 12:
this.props.navigation.goBack();
case 13:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[1, 8]]);
}));
function clearRoom(_x) {
return _clearRoom.apply(this, arguments);
}
return clearRoom;
}();
_proto.getDoctorInfo = /*#__PURE__*/function () {
var _getDoctorInfo = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(transaction) {
var _yield$API$get, doctorInfo;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
_context3.next = 3;
return API.get(APP_BASE_URL + "/v2/consultations/doctor-info?trx_id=" + transaction.transaction_id);
case 3:
_yield$API$get = _context3.sent;
doctorInfo = _yield$API$get.data.data;
this.setState({
doctorInfo: doctorInfo
});
console.log(doctorInfo);
_context3.next = 12;
break;
case 9:
_context3.prev = 9;
_context3.t0 = _context3["catch"](0);
console.log(_context3.t0.response);
case 12:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[0, 9]]);
}));
function getDoctorInfo(_x2) {
return _getDoctorInfo.apply(this, arguments);
}
return getDoctorInfo;
}();
_proto.checkRoom = function checkRoom(roomData) {
var _this2 = this;
var time = 0; // start polling check transaction status
this.pollingInterval = setInterval(function () {
API.get(APP_BASE_URL + "/v2/consultations/patient/" + roomData.patient_id + "?trxId=" + roomData.trx_id).then(function (_ref2) {
var pollingResp = _ref2.data.data;
_this2.setState({
time: time * 3
}); // transaction get doctor
if ((pollingResp == null ? void 0 : pollingResp.length) > 0 && pollingResp[0].state === "in_progress") {
console.log("doctor found, connecting to doctor", pollingResp); // send consultation if new transaction to message room
if (_this2.props.navigation.state.params.consultation && !_this2.props.navigation.state.params.activeTransaction) {
_this2.sendMessage(pollingResp[0]);
}
_this2.setState({
room: pollingResp[0]
});
_this2.getDoctorInfo(pollingResp[0]);
clearInterval(_this2.pollingInterval);
} // transaction didn't get doctor
if ((pollingResp == null ? void 0 : pollingResp.length) > 0 && pollingResp[0].state === "doctor_not_found") {
console.log("doctor not found, alert to cancel");
_this2.clearRoom(roomData);
clearInterval(_this2.pollingInterval);
} // too long in progress state so canceled by system
if (++time >= 20) {
console.log("canceled by system");
_this2.clearRoom(roomData);
clearInterval(_this2.pollingInterval);
}
});
}, 3000);
};
_proto.componentDidMount = function componentDidMount() {
this.promise = this.createRoom();
};
_proto.componentWillUnmount = function componentWillUnmount() {
clearInterval(this.interval);
clearInterval(this.pollingInterval);
};
_proto.getBaymaxWidgetURL = function getBaymaxWidgetURL() {
var _this$state$room = this.state.room,
website_token = _this$state$room.website_token,
transaction_id = _this$state$room.transaction_id;
return BAYMAX_WIDGET_URL + "/website_token/" + website_token + "/transaction_id/" + transaction_id + "/access_token/" + this.props.accessToken;
};
_proto.render = function render() {
var _this3 = this;
var avatar;
if (this.state.doctorInfo) {
avatar = this.state.doctorInfo.doctor_photo;
} else {
avatar = require("../assets/avatars/doctor.png");
}
var _this$props$navigatio3 = this.props.navigation.state.params,
enableVoiceCall = _this$props$navigatio3.enableVoiceCall,
enableVideoCall = _this$props$navigatio3.enableVideoCall; // inject voximplant config to widget
var injectJs = "window.voximplantConfig = {\n enableVoiceCall:" + enableVoiceCall + ", \n enableVideoCall:" + enableVideoCall + "\n }";
var foreground = function foreground(msg) {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$9.container, {
backgroundColor: _this3.props.themeColors.primary
}]
}, _this3.state.time >= 10 && /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: _this3.onCancel,
position: "start",
text: "Batal",
theme: "light"
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$9.content
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$9.message
}, msg), /*#__PURE__*/React__default['default'].createElement(PulseLoader, {
avatar: avatar
})));
};
if (this.state.room) {
var uri = this.getBaymaxWidgetURL();
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.KeyboardAvoidingView, {
enabled: true,
contentContainerStyle: {
flex: 1
},
keyboardVerticalOffset: reactNative.Platform.select({
ios: -50,
android: 20
}),
style: {
flexGrow: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNativeWebview.WebView, {
onNavigationStateChange: this.onNavigationStateChange,
source: {
uri: uri
},
style: {
flex: 1
},
originWhitelist: ["https://*"],
onMessage: function onMessage(e) {
return _this3.onMessage(e);
},
allowsInlineMediaPlayback: true,
mediaPlaybackRequiresUserAction: false,
injectedJavaScript: injectJs
})), this.state.loading && this.state.doctorInfo ? foreground("Anda terhubung dengan " + this.state.doctorInfo.doctor_f_name + " " + this.state.doctorInfo.doctor_l_name + ", sedang memuat percakapan.") : null);
} else {
return foreground("Tunggu Sebentar ya, Kami sedang mencarikan Dokter untuk Anda");
}
};
return WaitingScreen;
}(React.Component);
var WaitingScreen$1 = reactRedux.connect(function (state) {
return {
fcmToken: state.token.fcmToken,
themeColors: state.themeColors,
accessToken: state.token.accessToken
};
})(WaitingScreen);
var AskScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(AskScreen, _React$Component);
function AskScreen() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "state", {
containerWidth: 0
});
return _this;
}
var _proto = AskScreen.prototype;
_proto.handleCancelPress = function handleCancelPress() {
this.props.navigation.goBack();
};
_proto.handleContainerLayout = function handleContainerLayout(_ref) {
var width = _ref.nativeEvent.layout.width;
this.setState({
containerWidth: width
});
};
_proto.handleDependencyPress = function handleDependencyPress() {
this.props.navigation.replace("dependencies", _extends({}, this.props.navigation.state.params));
};
_proto.handlePatientPress = function handlePatientPress() {
this.props.navigation.replace("symptom", _extends({}, this.props.navigation.state.params));
};
_proto.render = function render() {
var _this2 = this;
var themeColors = this.props.themeColors;
var containerWidth = this.state.containerWidth;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
onLayout: function onLayout(e) {
return _this2.handleContainerLayout(e);
},
style: [styles$8.container, {
backgroundColor: themeColors.primary
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.SafeAreaView, null, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.handleCancelPress();
},
style: styles$8.cancelButton
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/round_arrow_back_ios_white_18dp.png")
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$8.cancelText
}, I18n__default['default'].t("prixa.cancel")))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$8.illustrationContainer
}, /*#__PURE__*/React__default['default'].createElement(AutoHeightImage__default['default'], {
source: require("../assets/illustrations/ask.png"),
width: containerWidth - 120
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$8.contentContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$8.question, {
color: themeColors.darkestPrimary
}]
}, I18n__default['default'].t("prixa.intendedFor")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$8.actionsContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.handlePatientPress();
},
style: [styles$8.dependencyButton, {
backgroundColor: themeColors.darkestPrimary
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$8.dependencyText
}, this.props.navigation.state.params.firstName)), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.handleDependencyPress();
},
style: styles$8.patientButton
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$8.patientText
}, I18n__default['default'].t("prixa.others"))))));
};
return AskScreen;
}(React__default['default'].Component);
var styles$8 = reactNative.StyleSheet.create({
actionsContainer: {
flexDirection: "row",
justifyContent: "space-between"
},
cancelButton: {
alignItems: "center",
flexDirection: "row",
padding: 15,
paddingVertical: 36
},
cancelText: _extends({
color: staticColors.white,
fontSize: 16,
marginStart: 15
}, fonts.bold),
container: {
flex: 1
},
contentContainer: {
backgroundColor: staticColors.white,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
paddingHorizontal: 30,
paddingVertical: 40
},
dependencyButton: {
borderRadius: 20,
paddingHorizontal: 30,
paddingVertical: 10
},
dependencyText: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold),
illustrationContainer: {
alignItems: "center",
flexGrow: 1,
justifyContent: "center"
},
patientButton: {
backgroundColor: staticColors.forestFern,
borderRadius: 20,
paddingHorizontal: 30,
paddingVertical: 10
},
patientText: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold),
question: _extends({
fontSize: 24,
marginBottom: 30,
textAlign: "center"
}, fonts.regular)
});
var AskScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(AskScreen);
var IntroSlide = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(IntroSlide, _React$Component);
function IntroSlide() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = IntroSlide.prototype;
_proto.render = function render() {
var _this$props = this.props,
content = _this$props.content,
image = _this$props.image,
themeColors = _this$props.themeColors,
title = _this$props.title,
width = _this$props.width;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$7.container, {
width: width
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
resizeMode: "contain",
source: image,
style: [styles$7.image, {
width: width - 60
}]
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$7.title, {
color: themeColors.darkestPrimary
}]
}, title), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$7.content, {
color: themeColors.darkestPrimary
}]
}, content));
};
return IntroSlide;
}(React__default['default'].Component);
_defineProperty(IntroSlide, "propTypes", {
content: PropTypes__default['default'].string.isRequired,
image: reactNative.Image.propTypes.source.isRequired,
title: PropTypes__default['default'].string.isRequired,
width: PropTypes__default['default'].number.isRequired
});
var styles$7 = reactNative.StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
padding: 30
},
content: _extends({
fontSize: 22,
textAlign: "center"
}, fonts.regular),
image: {
flex: 0.5,
marginBottom: 40
},
title: _extends({
fontSize: 22,
marginBottom: 10,
textAlign: "center"
}, fonts.bold)
});
var IntroSlide$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(IntroSlide);
var _Dimensions$get$2 = reactNative.Dimensions.get("window"),
width$1 = _Dimensions$get$2.width;
var IntroScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(IntroScreen, _React$Component);
function IntroScreen() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = IntroScreen.prototype;
_proto.handleDone = function handleDone() {
this.props.navigation.goBack();
};
_proto.handleSkip = function handleSkip() {
this.props.navigation.goBack();
};
_proto.renderItem = function renderItem(_ref) {
var item = _ref.item;
return /*#__PURE__*/React__default['default'].createElement(IntroSlide$1, {
content: item.text,
image: item.image,
title: item.title,
width: width$1
});
};
_proto.render = function render() {
var _this = this;
var _this$props = this.props,
introSlides = _this$props.introSlides,
themeColors = _this$props.themeColors;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$6.container, {
backgroundColor: themeColors.lightestPrimary
}]
}, /*#__PURE__*/React__default['default'].createElement(AppIntroSlider__default['default'], {
activeDotStyle: {
backgroundColor: themeColors.darkestPrimary
},
buttonTextStyle: [styles$6.buttonText, {
color: themeColors.darkestPrimary
}],
doneLabel: I18n__default['default'].t("prixa.done"),
dotStyle: {
backgroundColor: themeColors.lighterPrimary
},
nextLabel: I18n__default['default'].t("prixa.next"),
onDone: function onDone() {
return _this.handleDone();
},
onSkip: function onSkip() {
return _this.handleSkip();
},
prevLabel: I18n__default['default'].t("prixa.previous"),
renderItem: this.renderItem,
showPrevButton: true,
showSkipButton: true,
skipLabel: I18n__default['default'].t("prixa.skip"),
slides: introSlides
}));
};
return IntroScreen;
}(React__default['default'].Component);
var styles$6 = reactNative.StyleSheet.create({
buttonText: _extends({
fontSize: 16
}, fonts.bold),
container: {
flex: 1
}
});
var IntroScreen$1 = reactRedux.connect(function (state) {
return {
introSlides: state.introSlides,
themeColors: state.themeColors
};
})(IntroScreen);
var VideoCallScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(VideoCallScreen, _React$Component);
function VideoCallScreen(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "handleAppStateChange", function (appState) {
if (appState === "background") {
if (_this.client) {
_this.client.disconnect();
}
}
});
_defineProperty(_assertThisInitialized(_this), "renderContent", function () {
var _this$state = _this.state,
audioSent = _this$state.audioSent,
cameraType = _this$state.cameraType,
localVideoStreamId = _this$state.localVideoStreamId,
remoteVideoStreamId = _this$state.remoteVideoStreamId;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNativeVoximplant.Voximplant.VideoView, {
scaleType: reactNativeVoximplant.Voximplant.RenderScaleType.SCALE_FILL,
style: {
flex: 1
},
videoStreamId: remoteVideoStreamId
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20,
position: "absolute",
right: 0
}
}, /*#__PURE__*/React__default['default'].createElement(reactNativeVoximplant.Voximplant.VideoView, {
style: {
height: 150,
width: 150
},
videoStreamId: localVideoStreamId
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
bottom: 0,
left: 0,
padding: 40,
position: "absolute",
right: 0
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
flexDirection: "row",
justifyContent: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
if (cameraType === reactNativeVoximplant.Voximplant.Hardware.CameraType.FRONT) {
reactNativeVoximplant.Voximplant.Hardware.CameraManager.getInstance().switchCamera(reactNativeVoximplant.Voximplant.Hardware.CameraType.BACK);
_this.setState({
cameraType: reactNativeVoximplant.Voximplant.Hardware.CameraType.BACK
});
} else {
reactNativeVoximplant.Voximplant.Hardware.CameraManager.getInstance().switchCamera(reactNativeVoximplant.Voximplant.Hardware.CameraType.FRONT);
_this.setState({
cameraType: reactNativeVoximplant.Voximplant.Hardware.CameraType.FRONT
});
}
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
backgroundColor: staticColors.white,
borderRadius: 25,
height: 50,
justifyContent: "center",
width: 50
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: cameraType === reactNativeVoximplant.Voximplant.Hardware.CameraType.FRONT ? require("../assets/icons/round_camera_rear_black_36dp.png") : require("../assets/icons/round_camera_front_black_36dp.png"),
style: {
height: 30,
width: 30
}
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this.props.navigation.goBack();
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
backgroundColor: staticColors.thimbleberry,
borderRadius: 37.5,
height: 75,
justifyContent: "center",
margin: 25,
width: 75
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/round_call_end_white_36dp.png"),
style: {
height: 45,
width: 45
}
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
if (audioSent) {
_this.call.sendAudio(false);
_this.setState({
audioSent: false
});
} else {
_this.call.sendAudio(true);
_this.setState({
audioSent: true
});
}
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
backgroundColor: staticColors.white,
borderRadius: 25,
height: 50,
justifyContent: "center",
width: 50
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: audioSent ? require("../assets/mic-on.png") : require("../assets/mic-off.png"),
style: {
height: 30,
width: 30
}
}))))));
});
_defineProperty(_assertThisInitialized(_this), "renderLoading", function () {
var doctor = _this.state.doctor;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1,
justifyContent: "space-around"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
alignSelf: "center",
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24
}, fonts.regular)
}, "Panggilan Video"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24
}, fonts.bold)
}, doctor.fullName)), /*#__PURE__*/React__default['default'].createElement(PulseLoader, null)), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
marginTop: -40,
padding: 25
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this.props.navigation.goBack();
},
style: {
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
backgroundColor: staticColors.thimbleberry,
borderRadius: 25,
height: 50,
justifyContent: "center",
width: 50
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/round_call_end_white_36dp.png"),
style: {
height: 30,
width: 30
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.cavernous,
fontSize: 18,
marginTop: 10
}, fonts.regular)
}, "Akhiri Panggilan"))));
});
var _this$props$navigatio = _this.props.navigation.state.params,
_doctor = _this$props$navigatio.doctor,
patient = _this$props$navigatio.patient,
transaction = _this$props$navigatio.transaction;
_this.state = {
audioSent: true,
cameraType: reactNativeVoximplant.Voximplant.Hardware.CameraType.FRONT,
doctor: {
fullName: _doctor.fullName
},
isLoading: true,
localVideoStreamId: null,
patient: {
id: patient.id
},
remoteVideoStreamId: null,
transaction: {
id: transaction.id
}
};
return _this;
}
var _proto = VideoCallScreen.prototype;
_proto.componentDidMount = function componentDidMount() {
var _this2 = this;
reactNative.AppState.addEventListener("change", this.handleAppStateChange);
InCallManager__default['default'].start({
media: "video",
ringback: "_BUNDLE_"
});
this.client = reactNativeVoximplant.Voximplant.getInstance();
this.connect().then(function () {
return _this2.login();
});
};
_proto.componentWillUnmount = function componentWillUnmount() {
reactNative.AppState.removeEventListener("change", this.handleAppStateChange);
this.client.disconnect();
InCallManager__default['default'].stop({
busytone: "_BUNDLE_"
});
};
_proto.connect = /*#__PURE__*/function () {
var _connect = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.client.connect();
case 2:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function connect() {
return _connect.apply(this, arguments);
}
return connect;
}();
_proto.exchangeLoginKey = /*#__PURE__*/function () {
var _exchangeLoginKey = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(key) {
var token, baseUrl, response, json;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
token = this.props.token;
baseUrl = getBaseUrl();
_context2.next = 4;
return fetch(baseUrl + "call/start", {
body: JSON.stringify({
login_key: key
}),
headers: {
Authorization: "Bearer " + token,
"Content-Type": "application/json"
},
method: "POST"
});
case 4:
response = _context2.sent;
_context2.next = 7;
return response.json();
case 7:
json = _context2.sent;
return _context2.abrupt("return", {
doctor: {
alias: json["data"]["doctor"]["alias"]
},
token: json["data"]["token"]
});
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function exchangeLoginKey(_x) {
return _exchangeLoginKey.apply(this, arguments);
}
return exchangeLoginKey;
}();
_proto.login = /*#__PURE__*/function () {
var _login = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
var _this3 = this;
var _this$state2, patient, transaction, accountName, appName, domain, alias, _yield$this$exchangeL, doctor, token;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_this$state2 = this.state, patient = _this$state2.patient, transaction = _this$state2.transaction;
accountName = getVoximplantAccountName();
appName = getVoximplantAppName();
domain = appName + "." + accountName + ".voximplant.com";
alias = "patient-" + patient.id;
_context3.prev = 5;
_context3.next = 8;
return this.client.requestOneTimeLoginKey(alias + "@" + domain);
case 8:
_context3.next = 27;
break;
case 10:
_context3.prev = 10;
_context3.t0 = _context3["catch"](5);
if (!(_context3.t0.code === 302)) {
_context3.next = 27;
break;
}
_context3.next = 15;
return this.exchangeLoginKey(_context3.t0.key);
case 15:
_yield$this$exchangeL = _context3.sent;
doctor = _yield$this$exchangeL.doctor;
token = _yield$this$exchangeL.token;
_context3.next = 20;
return this.client.loginWithOneTimeKey(alias + "@" + domain, token);
case 20:
_context3.next = 22;
return this.client.call(doctor.alias + "@" + domain, {
customData: JSON.stringify({
transaction_id: transaction.id
}),
video: {
receiveVideo: true,
sendVideo: true
}
});
case 22:
this.call = _context3.sent;
this.call.on(reactNativeVoximplant.Voximplant.CallEvents.Disconnected, function () {
return _this3.props.navigation.goBack();
});
this.call.on(reactNativeVoximplant.Voximplant.CallEvents.EndpointAdded, function (event) {
event.endpoint.on(reactNativeVoximplant.Voximplant.EndpointEvents.RemoteVideoStreamAdded, function (event) {
InCallManager__default['default'].stopRingback();
reactNativeVoximplant.Voximplant.Hardware.AudioDeviceManager.getInstance().selectAudioDevice(reactNativeVoximplant.Voximplant.Hardware.AudioDevice.SPEAKER);
_this3.setState({
isLoading: false,
remoteVideoStreamId: event.videoStream.id
});
});
});
this.call.on(reactNativeVoximplant.Voximplant.CallEvents.Failed, function (e) {
if (e.code === 603) {
reactNative.Alert.alert("Whoops", "Mohon maaf untuk sementara dokter tidak dapat menerima panggilan karena trafik yang tinggi.");
}
_this3.props.navigation.goBack();
});
this.call.on(reactNativeVoximplant.Voximplant.CallEvents.LocalVideoStreamAdded, function (event) {
return _this3.setState({
localVideoStreamId: event.videoStream.id
});
});
case 27:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[5, 10]]);
}));
function login() {
return _login.apply(this, arguments);
}
return login;
}();
_proto.render = function render() {
var themeColors = this.props.themeColors;
var isLoading = this.state.isLoading;
var container;
if (isLoading) {
container = this.renderLoading();
} else {
container = this.renderContent();
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: themeColors.primary,
flex: 1
}
}, container);
};
return VideoCallScreen;
}(React__default['default'].Component);
var VideoCallScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors,
token: state.token
};
})(VideoCallScreen);
var AudioCallScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(AudioCallScreen, _React$Component);
function AudioCallScreen(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "handleAppStateChange", function (appState) {
if (appState === "background") {
if (_this.client) {
_this.client.disconnect();
}
}
});
_defineProperty(_assertThisInitialized(_this), "renderContent", function () {
var doctor = _this.state.doctor;
return /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: {
uri: doctor.avatarUrl
},
style: {
flex: 1
}
});
});
_defineProperty(_assertThisInitialized(_this), "renderLoading", function () {
return /*#__PURE__*/React__default['default'].createElement(PulseLoader, null);
});
var _this$props$navigatio = _this.props.navigation.state.params,
_doctor = _this$props$navigatio.doctor,
patient = _this$props$navigatio.patient,
transaction = _this$props$navigatio.transaction;
_this.state = {
doctor: {
avatarUrl: null,
fullName: _doctor.fullName
},
isLoading: true,
patient: {
id: patient.id
},
transaction: {
id: transaction.id
}
};
return _this;
}
var _proto = AudioCallScreen.prototype;
_proto.componentDidMount = function componentDidMount() {
var _this2 = this;
reactNative.AppState.addEventListener("change", this.handleAppStateChange);
InCallManager__default['default'].start({
media: "audio",
ringback: "_BUNDLE_"
});
this.client = reactNativeVoximplant.Voximplant.getInstance();
this.connect().then(function () {
return _this2.login();
});
};
_proto.componentWillUnmount = function componentWillUnmount() {
reactNative.AppState.removeEventListener("change", this.handleAppStateChange);
this.client.disconnect();
InCallManager__default['default'].stop({
busytone: "_BUNDLE_"
});
};
_proto.connect = /*#__PURE__*/function () {
var _connect = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return this.client.connect();
case 2:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function connect() {
return _connect.apply(this, arguments);
}
return connect;
}();
_proto.exchangeLoginKey = /*#__PURE__*/function () {
var _exchangeLoginKey = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(key) {
var token, baseUrl, response, json;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
token = this.props.token;
baseUrl = getBaseUrl();
_context2.next = 4;
return fetch(baseUrl + "call/start", {
body: JSON.stringify({
login_key: key
}),
headers: {
Authorization: "Bearer " + token,
"Content-Type": "application/json"
},
method: "POST"
});
case 4:
response = _context2.sent;
_context2.next = 7;
return response.json();
case 7:
json = _context2.sent;
return _context2.abrupt("return", {
doctor: {
alias: json["data"]["doctor"]["alias"],
avatarUrl: json["data"]["doctor"]["avatar_url"]
},
token: json["data"]["token"]
});
case 9:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function exchangeLoginKey(_x) {
return _exchangeLoginKey.apply(this, arguments);
}
return exchangeLoginKey;
}();
_proto.login = /*#__PURE__*/function () {
var _login = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
var _this3 = this;
var _this$state, oldDoctor, patient, transaction, accountName, appName, domain, alias, _yield$this$exchangeL, newDoctor, token, call;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_this$state = this.state, oldDoctor = _this$state.doctor, patient = _this$state.patient, transaction = _this$state.transaction;
accountName = getVoximplantAccountName();
appName = getVoximplantAppName();
domain = appName + "." + accountName + ".voximplant.com";
alias = "patient-" + patient.id;
_context3.prev = 5;
_context3.next = 8;
return this.client.requestOneTimeLoginKey(alias + "@" + domain);
case 8:
_context3.next = 26;
break;
case 10:
_context3.prev = 10;
_context3.t0 = _context3["catch"](5);
if (!(_context3.t0.code === 302)) {
_context3.next = 26;
break;
}
_context3.next = 15;
return this.exchangeLoginKey(_context3.t0.key);
case 15:
_yield$this$exchangeL = _context3.sent;
newDoctor = _yield$this$exchangeL.doctor;
token = _yield$this$exchangeL.token;
_context3.next = 20;
return this.client.loginWithOneTimeKey(alias + "@" + domain, token);
case 20:
_context3.next = 22;
return this.client.call(newDoctor.alias + "@" + domain, {
customData: JSON.stringify({
transaction_id: transaction.id
})
});
case 22:
call = _context3.sent;
call.on(reactNativeVoximplant.Voximplant.CallEvents.Connected, function () {
InCallManager__default['default'].stopRingback();
_this3.setState({
doctor: {
avatarUrl: newDoctor.avatarUrl,
fullName: oldDoctor.fullName
},
isLoading: false
});
});
call.on(reactNativeVoximplant.Voximplant.CallEvents.Disconnected, function () {
return _this3.props.navigation.goBack();
});
call.on(reactNativeVoximplant.Voximplant.CallEvents.Failed, function (e) {
if (e.code === 603) {
reactNative.Alert.alert("Whoops", "Mohon maaf untuk sementara dokter tidak dapat menerima panggilan karena trafik yang tinggi.");
}
_this3.props.navigation.goBack();
});
case 26:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[5, 10]]);
}));
function login() {
return _login.apply(this, arguments);
}
return login;
}();
_proto.render = function render() {
var _this4 = this;
var themeColors = this.props.themeColors;
var _this$state2 = this.state,
doctor = _this$state2.doctor,
isLoading = _this$state2.isLoading;
var container;
if (isLoading) {
container = this.renderLoading();
} else {
container = this.renderContent();
}
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: themeColors.primary,
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1,
justifyContent: "space-around"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
alignSelf: "center",
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24
}, fonts.regular)
}, "Panggilan Suara"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24
}, fonts.bold)
}, doctor.fullName)), container), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
marginTop: -40,
padding: 25
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this4.props.navigation.goBack();
},
style: {
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
backgroundColor: staticColors.thimbleberry,
borderRadius: 25,
height: 50,
justifyContent: "center",
width: 50
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/round_call_end_white_36dp.png"),
style: {
height: 30,
width: 30
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.cavernous,
fontSize: 18,
marginTop: 10
}, fonts.regular)
}, "Akhiri Panggilan"))));
};
return AudioCallScreen;
}(React__default['default'].Component);
var AudioCallScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors,
token: state.token
};
})(AudioCallScreen);
var PreAssessmentScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PreAssessmentScreen, _React$Component);
function PreAssessmentScreen() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "handleBackPress", function () {
return true;
});
return _this;
}
var _proto = PreAssessmentScreen.prototype;
_proto.componentDidMount = function componentDidMount() {
this.backHandler = reactNative.BackHandler.addEventListener("hardwareBackPress", this.handleBackPress);
};
_proto.componentWillUnmount = function componentWillUnmount() {
this.backHandler.remove();
};
_proto.submit = /*#__PURE__*/function () {
var _submit = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(result) {
var token;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
token = this.props.token;
_context.next = 3;
return fetch(getBaseUrl() + "consultations/pre-assessment", {
headers: {
Authorization: "Bearer " + token,
"Content-Type": "application/json"
},
method: "POST",
body: JSON.stringify({
result: result
})
});
case 3:
this.props.navigation.goBack();
case 4:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function submit(_x) {
return _submit.apply(this, arguments);
}
return submit;
}();
_proto.render = function render() {
var _this2 = this;
var themeColors = this.props.themeColors;
var doctor = this.props.navigation.state.params.doctor;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: themeColors.primary,
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
alignItems: "center",
flexGrow: 1,
justifyContent: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: {
uri: doctor.avatarUrl
},
style: {
borderColor: "rgba(255, 255, 255, 0.5)",
borderRadius: 110,
borderWidth: 10,
height: 220,
marginBottom: 40,
width: 220
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.regular)
}, "Konsultasi Anda akan terhubung dengan"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24
}, fonts.bold)
}, doctor.fullName)), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
padding: 25
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.cavernous,
fontSize: 24,
marginBottom: 15,
textAlign: "center"
}, fonts.bold)
}, "Survey Singkat"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.grey,
fontSize: 16,
marginBottom: 30,
textAlign: "center"
}, fonts.regular)
}, "Sebelum memulai konsultasi, apakah Anda sebelumnya sudah ada rencana untuk datang ke rumah sakit/klinik untuk rawat jalan?"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
justifyContent: "space-around"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.submit(false);
},
style: {
backgroundColor: staticColors.thimbleberry,
borderRadius: 20,
paddingHorizontal: 30,
paddingVertical: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold)
}, "Tidak")), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.submit(true);
},
style: {
backgroundColor: staticColors.forestFern,
borderRadius: 20,
paddingHorizontal: 30,
paddingVertical: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold)
}, "Ya")))));
};
return PreAssessmentScreen;
}(React__default['default'].Component);
var PreAssessmentScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors,
token: state.token
};
})(PreAssessmentScreen);
var PostAssessmentScreen = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PostAssessmentScreen, _React$Component);
function PostAssessmentScreen() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "handleBackPress", function () {
return true;
});
return _this;
}
var _proto = PostAssessmentScreen.prototype;
_proto.componentDidMount = function componentDidMount() {
this.backHandler = reactNative.BackHandler.addEventListener("hardwareBackPress", this.handleBackPress);
};
_proto.componentWillUnmount = function componentWillUnmount() {
this.backHandler.remove();
};
_proto.submit = /*#__PURE__*/function () {
var _submit = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(result) {
var token;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
token = this.props.token;
_context.next = 3;
return fetch(getBaseUrl() + "consultations/post-assessment", {
headers: {
Authorization: "Bearer " + token,
"Content-Type": "application/json"
},
method: "POST",
body: JSON.stringify({
result: result
})
});
case 3:
this.props.navigation.goBack();
case 4:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function submit(_x) {
return _submit.apply(this, arguments);
}
return submit;
}();
_proto.render = function render() {
var _this2 = this;
var themeColors = this.props.themeColors;
var transaction = this.props.navigation.state.params.transaction;
var time = moment__default['default'](transaction.startedAt).format("DD MMMM YYYY [pukul] H:m ");
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: themeColors.primary,
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, {
style: {
flexGrow: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 24,
padding: 20,
textAlign: "center"
}, fonts.bold)
}, transaction.doctor.fullName), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: {
uri: transaction.doctor.avatarUrl
},
style: {
alignSelf: "center",
borderColor: "rgba(255, 255, 255, 0.5)",
borderRadius: 90,
borderWidth: 10,
height: 180,
marginVertical: 20,
width: 180
}
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold)
}, "Summary Konsultasi"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.regular)
}, transaction.summary))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: staticColors.white,
borderTopEndRadius: 40,
borderTopStartRadius: 40,
padding: 25
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.cavernous,
fontSize: 24,
marginBottom: 15,
textAlign: "center"
}, fonts.bold)
}, "Survey Singkat"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.grey,
fontSize: 16,
marginBottom: 30,
textAlign: "center"
}, fonts.regular)
}, "Setelah konsultasi dengan ", transaction.doctor.fullName, " pada ", time, "apakah Anda jadi rawat jalan ke rumah sakit/klinik?"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
justifyContent: "space-around"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.submit(false);
},
style: {
backgroundColor: staticColors.thimbleberry,
borderRadius: 20,
paddingHorizontal: 30,
paddingVertical: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold)
}, "Tidak")), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this2.submit(true);
},
style: {
backgroundColor: staticColors.forestFern,
borderRadius: 20,
paddingHorizontal: 30,
paddingVertical: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
color: staticColors.white,
fontSize: 16
}, fonts.bold)
}, "Ya")))));
};
return PostAssessmentScreen;
}(React__default['default'].Component);
var PostAssessmentScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors,
token: state.token
};
})(PostAssessmentScreen);
var PrescriptionHistoryDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PrescriptionHistoryDetail, _React$Component);
function PrescriptionHistoryDetail() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_defineProperty(_assertThisInitialized(_this), "state", {
isLoading: true
});
_defineProperty(_assertThisInitialized(_this), "goToHistoryDetail", function (data) {
var navigation = _this.props.navigation;
var _navigation$state$par = navigation.state.params,
cardNumber = _navigation$state$par.cardNumber,
fullName = _navigation$state$par.fullName,
gender = _navigation$state$par.gender;
navigation.navigate("PrescriptionHistoryDetail", {
data: data,
cardNumber: cardNumber,
fullName: fullName,
gender: gender
});
});
_defineProperty(_assertThisInitialized(_this), "goToPrescriptionDetail", function (data) {
var navigation = _this.props.navigation;
var _navigation$state$par2 = navigation.state.params,
cardNumber = _navigation$state$par2.cardNumber,
fullName = _navigation$state$par2.fullName,
gender = _navigation$state$par2.gender,
config = _navigation$state$par2.config;
navigation.navigate("PrescriptionDetail", {
prescriptionId: data.id,
customerName: fullName,
patientName: data.patientName,
cardNumber: cardNumber,
gender: gender,
pharmacy: config.pharmacy
});
});
return _this;
}
var _proto = PrescriptionHistoryDetail.prototype;
_proto.componentDidMount = function componentDidMount() {
var _this2 = this;
this.props.navigation.addListener("willFocus", function () {
console.info("willFocus");
_this2.setState({
isLoading: true
});
});
this.props.navigation.addListener("didFocus", function () {
console.info("didFocus");
_this2.setState({
isLoading: false
});
});
this.props.navigation.addListener("willBlur", function () {
return console.info("willBlur");
});
this.props.navigation.addListener("didBlur", function () {
console.info("didBlur");
_this2.setState({
isLoading: false
});
});
};
_proto.render = function render() {
var _this3 = this;
var _this$props = this.props,
data = _this$props.data,
themeColors = _this$props.themeColors,
navigation = _this$props.navigation;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$5.container
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$5.detailContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$5.regularBold
}, data.patientName), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$5.section, {
marginTop: 5,
color: staticColors.grey
}]
}, I18n__default['default'].t("prixa.lifepackSubscriptionIdWithNumber", {
no: data.lifepackSubscriptionId
})), !!data.status ? navigation.state.params.config.pharmacy.pharmacy_name === "Siloam" ? /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$5.regular, _extends({
marginTop: 5,
color: themeColors.primary
}, fonts.bold, {
textTransform: "capitalize"
})]
}, I18n__default['default'].t("prixa.defaultStatusDelivery")) : /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$5.regular, _extends({
marginTop: 5,
color: themeColors.primary
}, fonts.bold, {
textTransform: "capitalize"
})]
}, I18n__default['default'].t("prixa.prescriptionStatusDelivery", {
status: data.status
})) : null)), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$5.buttonContainer
}, navigation.state.params.config.is_pharmacy_enabled == true && !!data.status ? /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this3.goToHistoryDetail(data);
},
style: {
marginTop: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 20,
backgroundColor: staticColors.forestFern
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 11
}, fonts.bold, {
color: "#fff",
width: 110,
textAlign: "center",
paddingVertical: 9,
textTransform: "uppercase"
})
}, I18n__default['default'].t("prixa.prescriptionView")))) : null, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return _this3.goToPrescriptionDetail(data);
},
style: {
marginTop: 20,
marginLeft: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
borderRadius: 20,
borderColor: staticColors.forestFern,
borderWidth: 2
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 11
}, fonts.bold, {
color: staticColors.forestFern,
width: 120,
textAlign: "center",
paddingVertical: 7,
textTransform: "uppercase"
})
}, !!data.status ? I18n__default['default'].t("prixa.prescriptionDetail") : I18n__default['default'].t("prixa.prescriptionRedeem"))))));
};
return PrescriptionHistoryDetail;
}(React__default['default'].Component);
_defineProperty(PrescriptionHistoryDetail, "propTypes", {
data: PropTypes__default['default'].shape({
id: PropTypes__default['default'].string.isRequired,
prescriptionNo: PropTypes__default['default'].string,
lifepackSubscriptionId: PropTypes__default['default'].string,
patientName: PropTypes__default['default'].string.isRequired,
patientClass: PropTypes__default['default'].string,
status: PropTypes__default['default'].string,
prescriptionDate: PropTypes__default['default'].string,
lifepack: PropTypes__default['default'].object
}),
navigation: PropTypes__default['default'].object.isRequired
});
var styles$5 = reactNative.StyleSheet.create({
container: {
flexDirection: "row"
},
buttonContainer: {
marginTop: 10,
justifyContent: "flex-end",
flexDirection: "row",
flex: 1,
paddingLeft: 40
},
detailContainer: {
flex: 1,
paddingRight: 8
},
section: _extends({
fontSize: 12
}, fonts.regular),
regular: _extends({
fontSize: 13
}, fonts.regular),
regularBold: _extends({
fontSize: 13
}, fonts.bold, {
color: "#000"
})
});
var PrescriptionHistoryDetail$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryDetail);
var PrescriptionHistoryItem = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PrescriptionHistoryItem, _React$Component);
function PrescriptionHistoryItem() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PrescriptionHistoryItem.prototype;
_proto.render = function render() {
var _this$props = this.props,
createdAt = _this$props.createdAt,
prescription = _this$props.prescription,
themeColors = _this$props.themeColors,
navigation = _this$props.navigation;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginBottom: 10
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$4.section, _extends({
color: themeColors.primary
}, fonts.bold)]
}, I18n__default['default'].t("prixa.prescriptionOn", {
date: I18n__default['default'].l("date.prixa.default", createdAt),
time: I18n__default['default'].l("time.prixa.default", createdAt)
}))), /*#__PURE__*/React__default['default'].createElement(PrescriptionHistoryDetail$1, {
navigation: navigation,
data: prescription
}));
};
return PrescriptionHistoryItem;
}(React__default['default'].Component);
_defineProperty(PrescriptionHistoryItem, "propTypes", {
createdAt: PropTypes__default['default'].instanceOf(Date).isRequired,
prescription: PropTypes__default['default'].shape({
id: PropTypes__default['default'].string.isRequired,
prescriptionNo: PropTypes__default['default'].string,
lifepackSubscriptionId: PropTypes__default['default'].string,
patientName: PropTypes__default['default'].string.isRequired,
patientClass: PropTypes__default['default'].string,
status: PropTypes__default['default'].string,
prescriptionDate: PropTypes__default['default'].string,
lifepack: PropTypes__default['default'].object
}).isRequired,
navigation: PropTypes__default['default'].object.isRequired
});
var styles$4 = reactNative.StyleSheet.create({
createdAt: _extends({
fontSize: 14,
marginBottom: 8
}, fonts.regular),
summary: _extends({
color: staticColors.grey,
fontSize: 10,
marginTop: 5,
textAlign: "justify"
}, fonts.regular),
section: _extends({
fontSize: 16
}, fonts.regular)
});
var PrescriptionHistoryItem$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryItem);
var PrescriptionHistoryScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(PrescriptionHistoryScreen, _Component);
function PrescriptionHistoryScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_this.state = {
isLoading: false,
refreshing: false,
historyData: []
};
return _this;
}
var _proto = PrescriptionHistoryScreen.prototype;
_proto.fetchPrescriptionHistory = /*#__PURE__*/function () {
var _fetchPrescriptionHistory = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(isInitializing) {
var patientId, _yield$API$get, prescriptionHistories, historyData;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!isInitializing) {
this.setState({
refreshing: true
});
}
_context.prev = 1;
patientId = this.props.navigation.state.params.patientId;
_context.next = 5;
return API.get(APP_BASE_URL + "/v2/profile/" + patientId + "/prescriptions");
case 5:
_yield$API$get = _context.sent;
prescriptionHistories = _yield$API$get.data.data;
historyData = prescriptionHistories.map(function (val) {
var _val$lifepack_subscri;
return {
type: "section",
date: moment__default['default'](val.created_at).toDate(),
icon: require("../assets/round_access_time_white_18dp.png"),
prescription: {
id: val.id,
prescriptionNo: val.prescription_number,
lifepackSubscriptionId: (_val$lifepack_subscri = val == null ? void 0 : val.lifepack_subscription_id) != null ? _val$lifepack_subscri : "-",
patientName: val.transaction_dependency ? val.transaction_dependency.first_name + " " + val.transaction_dependency.last_name : val.patient.patient_f_name + " " + val.patient.patient_l_name,
patientClass: val.patient.patient_class,
status: val.order_status,
prescriptionDate: moment__default['default'](val.created_at).format("DD MMMM YYYY"),
redeemDate: (val == null ? void 0 : val.claim_at) ? moment__default['default'](val.claim_at).format("DD MMMM YYYY") : "-",
lifepack: {
lifepackClaimId: val.lifepack_claim_id,
lifepackClaimUrl: val.lifepack_claim_url,
lifepackInvoiceUrl: val.lifepack_invoice_url,
lifepackSubmitRequest: val.lifepack_submit_request,
lifepackSubmitResponse: val.lifepack_submit_response,
lifepackSubscriptionId: val.lifepack_subscription_id
}
},
createdAt: moment__default['default'](val.created_at).toDate()
};
});
console.log({
prescriptionHistories: prescriptionHistories
});
this.setState({
historyData: historyData,
refreshing: false
});
_context.next = 15;
break;
case 12:
_context.prev = 12;
_context.t0 = _context["catch"](1);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 15:
case "end":
return _context.stop();
}
}
}, _callee, this, [[1, 12]]);
}));
function fetchPrescriptionHistory(_x) {
return _fetchPrescriptionHistory.apply(this, arguments);
}
return fetchPrescriptionHistory;
}();
_proto.componentDidMount = /*#__PURE__*/function () {
var _componentDidMount = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
this.setState({
isLoading: true
});
_context2.next = 3;
return this.fetchPrescriptionHistory(true);
case 3:
this.setState({
isLoading: false
});
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function componentDidMount() {
return _componentDidMount.apply(this, arguments);
}
return componentDidMount;
}();
_proto.render = function render() {
var _this2 = this;
return /*#__PURE__*/React__default['default'].createElement(ParallaxScrollView__default['default'], {
ref: function ref(_ref2) {
_this2.scrollRef = _ref2;
},
backgroundColor: this.props.themeColors.primary,
parallaxHeaderHeight: 200,
refreshControl: /*#__PURE__*/React__default['default'].createElement(reactNative.RefreshControl, {
refreshing: this.state.refreshing,
onRefresh: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return _this2.fetchPrescriptionHistory();
case 2:
return _context3.abrupt("return", _context3.sent);
case 3:
case "end":
return _context3.stop();
}
}
}, _callee3);
}))
}),
renderForeground: function renderForeground() {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: function onPress() {
_this2.props.navigation.goBack();
},
position: "start",
text: "Kembali",
theme: "light"
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
alignItems: "center",
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatarWithDetail, {
cardNumber: _this2.props.navigation.state.params.cardNumber,
fullName: _this2.props.navigation.state.params.fullName,
gender: _this2.props.navigation.state.params.gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
marginStart: 20
},
onPress: function onPress() {
return _this2.scrollRef.scrollTo({
x: 0,
y: 500
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/baseline_keyboard_arrow_up_white_18dp.png")
}))));
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: this.props.themeColors.primary
}
}, this.state.isLoading ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
paddingTop: 64
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1,
justifyContent: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: this.props.themeColors.primary
}))) : /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
paddingTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
width: 64,
height: 6,
borderRadius: 3,
marginBottom: 15,
opacity: 0.5,
backgroundColor: "#808080",
alignSelf: "center"
}
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: this.props.themeColors.darkestPrimary,
alignSelf: "center",
marginBottom: 30
})
}, "Riwayat Resep"), /*#__PURE__*/React__default['default'].createElement(Timeline__default['default'], {
innerCircle: "icon",
circleColor: this.props.themeColors.lighterPrimary,
lineColor: this.props.themeColors.primary,
data: this.state.historyData,
detailContainerStyle: {
marginTop: -13,
marginBottom: 13
},
listViewContainerStyle: {
marginLeft: 12,
marginRight: 32
},
renderDetail: function renderDetail(rowData) {
return /*#__PURE__*/React__default['default'].createElement(PrescriptionHistoryItem$1, {
createdAt: rowData.createdAt,
prescription: rowData.prescription,
navigation: _this2.props.navigation
});
},
showTime: false
}))));
};
return PrescriptionHistoryScreen;
}(React.Component);
var PrescriptionHistoryScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryScreen);
var currencyFormatter = function currencyFormatter(value) {
return currency__default['default'](value, {
symbol: "Rp ",
separator: ".",
decimal: ",",
precision: 0
}).format();
};
var PrescriptionHistoryItemDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PrescriptionHistoryItemDetail, _React$Component);
function PrescriptionHistoryItemDetail(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_this.state = {
products: [],
totalPayment: 0,
payments: {
subtotal_price: 0,
discount: 0,
total_price: 0,
delivery_price: 0
},
invoiceUrl: "",
prescriptionUrl: "",
claimId: ""
};
return _this;
}
var _proto = PrescriptionHistoryItemDetail.prototype;
_proto.calculateProducts = function calculateProducts() {
var detail = this.props.detail;
var products = [];
var payments = {
subtotal_price: 0,
discount: 0,
total_price: 0,
delivery_price: 0
};
var totalPayment = 0;
if (!detail.prescription_order_histories) {
return;
}
if (detail.prescription_order_histories.length === 0) {
return;
} // filter first history for products
var history = detail.prescription_order_histories[0];
var history_product = detail.prescription_order_histories.product;
if (history_product) {
history.product.map(function (product) {
products.push(product);
totalPayment += product.price || 0;
});
} // filter histories that has payments
var paymentHistories = detail.prescription_order_histories.filter(function (order) {
return !!order.payment;
});
if (paymentHistories.length > 0) {
var _paymentHistory$payme, _paymentHistory$payme2, _paymentHistory$payme3, _paymentHistory$payme4;
var paymentHistory = paymentHistories[0];
payments.subtotal_price = (paymentHistory == null ? void 0 : (_paymentHistory$payme = paymentHistory.payment) == null ? void 0 : _paymentHistory$payme.subtotal_price) || 0;
payments.discount = (paymentHistory == null ? void 0 : (_paymentHistory$payme2 = paymentHistory.payment) == null ? void 0 : _paymentHistory$payme2.discount) || 0;
payments.total_price = (paymentHistory == null ? void 0 : (_paymentHistory$payme3 = paymentHistory.payment) == null ? void 0 : _paymentHistory$payme3.total_price) || 0;
payments.delivery_price = (paymentHistory == null ? void 0 : (_paymentHistory$payme4 = paymentHistory.payment) == null ? void 0 : _paymentHistory$payme4.delivery_price) || 0;
} // filter histories that have claim ID
var claimHistories = detail.prescription_order_histories.filter(function (order) {
return !!order.claim_id;
});
if (claimHistories.length > 0) {
var claimHistory = claimHistories[0];
this.setState({
claimId: claimHistory.claim_id
});
} // filter histories that have invoice URL
var invoiceHistories = detail.prescription_order_histories.filter(function (order) {
return !!order.invoice_url;
});
if (invoiceHistories.length > 0) {
var invoiceHistory = invoiceHistories[0];
this.setState({
invoiceUrl: invoiceHistory.invoice_url
});
} //filter histories that have prescription URL
var prescriptionHistories = detail.prescription_order_histories.filter(function (order) {
return !!order.prescription_image;
});
if (prescriptionHistories.length > 0) {
var prescriptionHistory = prescriptionHistories[0];
this.setState({
prescriptionUrl: prescriptionHistory.prescription_image
});
} // set up address delivery
if (prescriptionHistories.length > 0) {
var _prescriptionHistory = prescriptionHistories[0];
if (_prescriptionHistory.patient.address != null) {
var _prescriptionHistory$, _prescriptionHistory$2, _prescriptionHistory$3, _prescriptionHistory$4;
var deliveryAddress = (_prescriptionHistory$ = (_prescriptionHistory$2 = _prescriptionHistory.patient.address) == null ? void 0 : _prescriptionHistory$2.second_line) != null ? _prescriptionHistory$ : "";
var deliveryPostalCode = (_prescriptionHistory$3 = (_prescriptionHistory$4 = _prescriptionHistory.patient.address) == null ? void 0 : _prescriptionHistory$4.postal_code) != null ? _prescriptionHistory$3 : "";
var newAddressDelivery = deliveryAddress != null ? deliveryAddress + " " + deliveryPostalCode : "-";
this.setState({
address: newAddressDelivery
});
}
}
this.setState({
products: products,
totalPayment: totalPayment,
payments: payments
});
};
_proto.componentDidMount = function componentDidMount() {
this.calculateProducts();
};
_proto.render = function render() {
var _this2 = this;
var _this$props = this.props,
data = _this$props.data,
themeColors = _this$props.themeColors,
navigation = _this$props.navigation,
detail = _this$props.detail;
var _this$state = this.state,
payments = _this$state.payments;
_this$state.totalPayment;
var invoiceUrl = _this$state.invoiceUrl,
prescriptionUrl = _this$state.prescriptionUrl,
claimId = _this$state.claimId,
address = _this$state.address;
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginLeft: 20,
marginRight: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.container
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.detailContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$3.section, fonts.bold, {
color: themeColors.primary
}]
}, I18n__default['default'].t("prixa.orderInfo"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.statusContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
disabled: !claimId || data.patientClass.toLowerCase() !== "group",
onPress: function onPress() {
var onDestinationChange = _this2.props.onDestinationChange;
onDestinationChange("geniclick://claim/" + claimId);
},
style: {
backgroundColor: claimId && data.patientClass.toLowerCase() === "group" ? staticColors.forestFern : '#F2F2F2',
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
paddingVertical: 8,
paddingHorizontal: 16,
borderRadius: 30
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [fonts.bold, {
color: staticColors.white,
textAlign: "center",
fontSize: 10,
textTransform: "uppercase"
}]
}, I18n__default['default'].t("prixa.prescriptionClaim"))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$3.container, styles$3.containerBorder]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.detailFullContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.lifepackSubscriptionId")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, data.lifepackSubscriptionId))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.prescriptionNoAlt")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, data.prescriptionNo))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.redeemDate")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, data.redeemDate))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.prescriptionDate")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, data.prescriptionDate))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.prescriptionPatient")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, data.patientName)))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$3.section, fonts.bold, {
color: themeColors.primary
}]
}, I18n__default['default'].t("prixa.prescriptionDelivery"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$3.container, styles$3.containerBorder]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.detailContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$3.regularBold, {
textTransform: "capitalize"
}]
}, detail.order_status || "-")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.statusContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
backgroundColor: staticColors.forestFern,
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
paddingVertical: 8,
paddingHorizontal: 16,
marginBottom: 8,
borderRadius: 30
},
onPress: function onPress() {
var detail = _this2.props.detail;
var _navigation$state$par = navigation.state.params,
cardNumber = _navigation$state$par.cardNumber,
fullName = _navigation$state$par.fullName,
gender = _navigation$state$par.gender;
navigation.navigate("PrescriptionHistoryDetailStatus", {
data: detail.prescription_order_histories,
cardNumber: cardNumber,
fullName: fullName,
gender: gender
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [fonts.bold, {
color: staticColors.white,
textAlign: "center",
fontSize: 10,
textTransform: "uppercase"
}]
}, I18n__default['default'].t("prixa.prescriptionDeliveryView")))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$3.section, fonts.bold, {
color: themeColors.primary
}]
}, I18n__default['default'].t("prixa.prescriptionPayment"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$3.container, styles$3.containerBorder]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.detailFullContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.paymentContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.paymentLabel
}, I18n__default['default'].t("prixa.prescriptionPaymentMedicine")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({}, styles$3.paymentText)
}, currencyFormatter(payments.subtotal_price)))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.paymentContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.paymentLabel
}, I18n__default['default'].t("prixa.prescriptionPaymentDelivery")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({}, styles$3.paymentText)
}, currencyFormatter(payments.delivery_price)))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.paymentContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({}, styles$3.paymentLabel, fonts.bold, {
color: themeColors.primary
})
}, I18n__default['default'].t("prixa.prescriptionPaymentTotal")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({}, styles$3.regularBold, {
color: themeColors.primary
})
}, currencyFormatter(payments.total_price))))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$3.section, fonts.bold, {
color: themeColors.primary
}]
}, I18n__default['default'].t("prixa.prescriptionDeliveryDetail"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$3.container]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.detailFullContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.prescriptionDeliveryDetailRecipientName")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, data.patientName))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.cellphoneNumber")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.regularBold
}, detail.patient_phone || "-"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$3.itemContainer
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.labelRegular
}, "" + I18n__default['default'].t("prixa.addressDelivery")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$3.addressText
}, address || "-"))))))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
marginTop: 30,
flexDirection: "row",
alignItems: "center",
backgroundColor: staticColors.forestFern
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: !!invoiceUrl ? themeColors.darkerPrimary : staticColors.grey,
height: 60,
width: "50%",
flexDirection: "row",
justifyContent: "center",
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
disabled: !invoiceUrl,
onPress: function onPress() {
reactNative.Linking.openURL(invoiceUrl);
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [fonts.bold, {
color: staticColors.white,
textAlign: "center",
fontSize: 15,
textTransform: "capitalize"
}]
}, I18n__default['default'].t("prixa.prescriptionPaymentDownload")))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: !!prescriptionUrl ? staticColors.forestFern : '#C0C0C0',
height: 60,
width: "50%",
flexDirection: "row",
justifyContent: "center",
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
disabled: !prescriptionUrl,
onPress: function onPress() {
reactNative.Linking.openURL(prescriptionUrl);
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [fonts.bold, {
color: staticColors.white,
textAlign: "center",
fontSize: 15,
textTransform: "capitalize"
}]
}, I18n__default['default'].t("prixa.prescriptionDownload"))))));
};
return PrescriptionHistoryItemDetail;
}(React__default['default'].Component);
_defineProperty(PrescriptionHistoryItemDetail, "propTypes", {
data: PropTypes__default['default'].shape({
prescriptionNo: PropTypes__default['default'].string,
lifepackSubscriptionId: PropTypes__default['default'].string,
patientName: PropTypes__default['default'].string.isRequired,
prescriptionDate: PropTypes__default['default'].string,
redeemDate: PropTypes__default['default'].string
}),
detail: PropTypes__default['default'].object.isRequired,
navigation: PropTypes__default['default'].object.isRequired,
onDestinationChange: PropTypes__default['default'].func
});
_defineProperty(PrescriptionHistoryItemDetail, "defaultProps", {
onDestinationChange: function onDestinationChange() {
console.log("onDestinationChange is not implemented!");
}
});
var styles$3 = reactNative.StyleSheet.create({
container: {
alignItems: "center",
flexDirection: "row",
paddingTop: 8
},
containerBorder: {
borderBottomColor: staticColors.grey,
borderBottomWidth: 1,
paddingBottom: 16
},
buttonContainer: {
alignItems: "center",
justifyContent: "center",
flexDirection: "row"
},
detailFullContainer: {
flexDirection: "column"
},
detailContainer: {
flex: 0.6,
flexDirection: "column"
},
bulletContainer: {
width: 10
},
itemContainer: {
flexDirection: "row",
alignItems: "flex-start",
justifyContent: "flex-start",
marginBottom: 10
},
paymentContainer: {
alignItems: "center",
justifyContent: "space-between",
flexDirection: "row",
width: "100%"
},
statusContainer: {
flex: 0.4,
flexDirection: "column",
alignItems: "flex-end",
justifyContent: "space-between"
},
section: _extends({
fontSize: 16
}, fonts.regular),
paymentText: _extends({
fontSize: 12,
marginVertical: 1
}, fonts.bold, {
textAlign: "right"
}),
paymentLabel: {
fontSize: 12,
textAlign: "right"
},
regularBig: _extends({
fontSize: 14
}, fonts.regular),
regularBold: _extends({
fontSize: 12,
color: '#000',
marginVertical: 2
}, fonts.bold),
labelRegular: {
fontSize: 11,
marginVertical: 2,
color: staticColors.grey
},
addressText: _extends({
fontSize: 12
}, fonts.bold, {
flex: 1,
flexWrap: "wrap",
marginRight: 5
})
});
var PrescriptionHistoryItemDetail$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryItemDetail);
var PrescriptionHistoryDetailScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(PrescriptionHistoryDetailScreen, _Component);
function PrescriptionHistoryDetailScreen(props) {
var _this;
_this = _Component.call(this, props) || this;
_this.state = {
isLoading: false,
refreshing: false,
data: {}
};
return _this;
}
var _proto = PrescriptionHistoryDetailScreen.prototype;
_proto.fetchPrescriptionHistoryDetail = /*#__PURE__*/function () {
var _fetchPrescriptionHistoryDetail = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(isInitializing) {
var id, _yield$API$get, data;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!isInitializing) {
this.setState({
refreshing: true
});
}
id = this.props.navigation.state.params.data.id;
_context.next = 4;
return API.get(APP_BASE_URL + "/v2/prescription/" + id);
case 4:
_yield$API$get = _context.sent;
data = _yield$API$get.data.data;
this.setState({
data: data
});
this.setState({
refreshing: false
});
case 8:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function fetchPrescriptionHistoryDetail(_x) {
return _fetchPrescriptionHistoryDetail.apply(this, arguments);
}
return fetchPrescriptionHistoryDetail;
}();
_proto.componentDidMount = /*#__PURE__*/function () {
var _componentDidMount = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2() {
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
this.setState({
isLoading: true
});
_context2.next = 3;
return this.fetchPrescriptionHistoryDetail(true);
case 3:
this.setState({
isLoading: false
});
case 4:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function componentDidMount() {
return _componentDidMount.apply(this, arguments);
}
return componentDidMount;
}();
_proto.render = function render() {
var _this2 = this;
var data = this.props.navigation.state.params.data;
var detail = this.state.data;
return /*#__PURE__*/React__default['default'].createElement(ParallaxScrollView__default['default'], {
ref: function ref(_ref2) {
_this2.scrollRef = _ref2;
},
backgroundColor: this.props.themeColors.primary,
parallaxHeaderHeight: 200,
refreshControl: /*#__PURE__*/React__default['default'].createElement(reactNative.RefreshControl, {
refreshing: this.state.refreshing,
onRefresh: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3() {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return _this2.fetchPrescriptionHistoryDetail();
case 2:
return _context3.abrupt("return", _context3.sent);
case 3:
case "end":
return _context3.stop();
}
}
}, _callee3);
}))
}),
renderForeground: function renderForeground() {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: function onPress() {
_this2.props.navigation.goBack();
},
position: "start",
text: "Kembali",
theme: "light"
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
alignItems: "center",
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatarWithDetail, {
cardNumber: _this2.props.navigation.state.params.cardNumber,
fullName: _this2.props.navigation.state.params.fullName,
gender: _this2.props.navigation.state.params.gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
marginStart: 20
},
onPress: function onPress() {
return _this2.scrollRef.scrollTo({
x: 0,
y: 500
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/baseline_keyboard_arrow_up_white_18dp.png")
}))));
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: this.props.themeColors.primary
}
}, this.state.isLoading ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
paddingTop: 64
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flex: 1,
justifyContent: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: this.props.themeColors.primary
}))) : /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
paddingTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: this.props.themeColors.darkestPrimary,
alignSelf: "center",
marginBottom: 30
})
}, "Detail Pesanan"), /*#__PURE__*/React__default['default'].createElement(PrescriptionHistoryItemDetail$1, {
data: data,
navigation: this.props.navigation,
detail: detail,
onDestinationChange: this.props.screenProps.onDestinationChange
}))));
};
return PrescriptionHistoryDetailScreen;
}(React.Component);
var PrescriptionHistoryDetailScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryDetailScreen);
var PrescriptionHistoryOrderStatusDetail = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(PrescriptionHistoryOrderStatusDetail, _React$Component);
function PrescriptionHistoryOrderStatusDetail() {
return _React$Component.apply(this, arguments) || this;
}
var _proto = PrescriptionHistoryOrderStatusDetail.prototype;
_proto.render = function render() {
var _this$props = this.props,
date = _this$props.date,
status = _this$props.status,
isLargeDetail = _this$props.isLargeDetail,
rejectReason = _this$props.rejectReason;
return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [isLargeDetail ? styles$2.sectionLarge : styles$2.section, {
textTransform: "uppercase"
}]
}, status), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: isLargeDetail ? styles$2.timestampLarge : styles$2.timestamp
}, I18n__default['default'].l("date.prixa.default", date) + " jam " + I18n__default['default'].l("time.prixa.default", date)), status.toLowerCase() === "resep ditolak" && /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$2.section
}, "" + I18n__default['default'].t("prixa.prescriptionRejectReason", {
reason: rejectReason.toLowerCase() || ""
})));
};
return PrescriptionHistoryOrderStatusDetail;
}(React__default['default'].Component);
_defineProperty(PrescriptionHistoryOrderStatusDetail, "propTypes", {
date: PropTypes__default['default'].instanceOf(Date).isRequired,
status: PropTypes__default['default'].string.isRequired,
isLargeDetail: PropTypes__default['default'].bool,
rejectReason: PropTypes__default['default'].string
});
var styles$2 = reactNative.StyleSheet.create({
sectionLarge: _extends({
fontSize: 16
}, fonts.bold),
section: _extends({
fontSize: 14
}, fonts.bold),
timestamp: _extends({
fontSize: 12
}, fonts.regular),
timestampLarge: _extends({
fontSize: 14
}, fonts.regular)
});
var PrescriptionHistoryOrderStatusDetail$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryOrderStatusDetail);
var PrescriptionHistoryDetailStatusScreen = /*#__PURE__*/function (_Component) {
_inheritsLoose(PrescriptionHistoryDetailStatusScreen, _Component);
function PrescriptionHistoryDetailStatusScreen(props) {
return _Component.call(this, props) || this;
}
var _proto = PrescriptionHistoryDetailStatusScreen.prototype;
_proto.render = function render() {
var _this = this;
var data = this.props.navigation.state.params.data;
return /*#__PURE__*/React__default['default'].createElement(ParallaxScrollView__default['default'], {
ref: function ref(_ref) {
_this.scrollRef = _ref;
},
backgroundColor: this.props.themeColors.primary,
parallaxHeaderHeight: 200,
renderForeground: function renderForeground() {
return /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(Header, {
onPress: function onPress() {
_this.props.navigation.goBack();
},
position: "start",
text: "Kembali",
theme: "light"
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
flexDirection: "row",
alignItems: "center",
padding: 20
}
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatarWithDetail, {
cardNumber: _this.props.navigation.state.params.cardNumber,
fullName: _this.props.navigation.state.params.fullName,
gender: _this.props.navigation.state.params.gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
marginStart: 20
},
onPress: function onPress() {
return _this.scrollRef.scrollTo({
x: 0,
y: 500
});
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/baseline_keyboard_arrow_up_white_18dp.png")
}))));
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: this.props.themeColors.primary
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
paddingTop: 16
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: _extends({
fontSize: 20
}, fonts.bold, {
color: this.props.themeColors.darkestPrimary,
alignSelf: "center",
marginBottom: 30
})
}, "DETAIL STATUS PESANAN"), /*#__PURE__*/React__default['default'].createElement(Timeline__default['default'], {
innerCircle: "icon",
circleColor: this.props.themeColors.lighterPrimary,
lineColor: this.props.themeColors.primary,
data: data,
detailContainerStyle: {
marginTop: -13,
marginBottom: 13
},
listViewContainerStyle: {
marginLeft: 12,
marginRight: 32
},
renderDetail: function renderDetail(rowData, rowID) {
return /*#__PURE__*/React__default['default'].createElement(PrescriptionHistoryOrderStatusDetail$1, {
date: moment__default['default'](rowData.timestamp).toDate(),
status: rowData.status,
isLargeDetail: rowID === 0,
rejectReason: rowData.reject_reason
});
},
showTime: false
}))));
};
return PrescriptionHistoryDetailStatusScreen;
}(React.Component);
var PrescriptionHistoryDetailStatusScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(PrescriptionHistoryDetailStatusScreen);
/* SVGR has dropped some elements not supported by react-native-svg: style */
function EnlargeIcon(props) {
return /*#__PURE__*/React.createElement(Svg__default['default'], _extends({
viewBox: "0 0 166.52 166.02"
}, props), /*#__PURE__*/React.createElement(Svg.Defs, null), /*#__PURE__*/React.createElement(Svg.G, {
id: "prefix__Layer_2",
"data-name": "Layer 2"
}, /*#__PURE__*/React.createElement(Svg.G, {
id: "prefix__Layer_1-2",
"data-name": "Layer 1"
}, /*#__PURE__*/React.createElement(Svg.Path, {
className: "prefix__cls-1",
d: "M123 63.18A59.82 59.82 0 1163.18 3.36 59.82 59.82 0 01123 63.18z"
}), /*#__PURE__*/React.createElement(Svg.Path, {
className: "prefix__cls-1",
d: "M99.34 110.64l51.47 52.01 12.35-12.71-51.53-51.69M63.18 33.1v60.16M33.1 63.18h60.16"
}))));
}
function DownloadIcon(props) {
return /*#__PURE__*/React.createElement(Svg__default['default'], _extends({
viewBox: "0 0 206.34 166.13"
}, props), /*#__PURE__*/React.createElement(Svg.Defs, null), /*#__PURE__*/React.createElement(Svg.G, {
id: "prefix__Layer_2",
"data-name": "Layer 2"
}, /*#__PURE__*/React.createElement(Svg.G, {
id: "prefix__Layer_1-2",
"data-name": "Layer 1"
}, /*#__PURE__*/React.createElement(Svg.Path, {
className: "prefix__cls-1",
d: "M103.09 90.93V3.36M63.85 83.13L98.28 121a8 8 0 0011.33 0L143 83.13"
}), /*#__PURE__*/React.createElement(Svg.Path, {
className: "prefix__cls-1",
d: "M3.36 103.28v51.46a8.06 8.06 0 008 8H194.9a8.07 8.07 0 008.08-8v-51.46"
}))));
}
var _this = undefined;
var _Dimensions$get$1 = reactNative.Dimensions.get("window"),
width = _Dimensions$get$1.width,
height$1 = _Dimensions$get$1.height;
var PrescriptionDetailScreen = function PrescriptionDetailScreen(props) {
var _useState = React.useState(""),
activeImage = _useState[0],
setActiveImage = _useState[1];
var _useState2 = React.useState(""),
prescriptionImg = _useState2[0],
setPrescriptionImg = _useState2[1];
var _useState3 = React.useState(""),
adjustedPrescriptionImg = _useState3[0],
setAdjustedPrescriptionImg = _useState3[1];
var _useState4 = React.useState(false),
isZoomIn = _useState4[0],
setIsZoomIn = _useState4[1];
var _useState5 = React.useState(false),
isDownloading = _useState5[0],
setIsDownloading = _useState5[1];
var _useState6 = React.useState(false),
isPrescriptionAlreadyRedeemed = _useState6[0],
setIsPrescriptionAlreadyRedeemed = _useState6[1];
var _useState7 = React.useState(false),
isPrescriptionEligible = _useState7[0],
setIsPrescriptionEligible = _useState7[1];
var _useState8 = React.useState(true),
isLoadingPrescriptionData = _useState8[0],
setIsLoadingPrescriptionData = _useState8[1];
var _useState9 = React.useState(false),
isPrescriptionLoadedSuccessfully = _useState9[0],
setIsPrescriptionLoadedSuccessfully = _useState9[1];
var _useState10 = React.useState(false),
isPrescImgSelected = _useState10[0],
setIsPrescImgSelected = _useState10[1];
var _useState11 = React.useState(false),
isAdjustedPrescImgSelected = _useState11[0],
setIsAdjustedPrescImgSelected = _useState11[1];
var _useState12 = React.useState(false),
activeImageError = _useState12[0],
setActiveImageError = _useState12[1];
React.useEffect(function () {
fetchPrescription();
}, []);
React.useEffect(function () {
if (prescriptionImg) {
setIsPrescImgSelected(true);
reactNative.Image.getSize(prescriptionImg, function (width, height) {
console.log("valid prescriptionImg", {
width: width,
height: height
});
setActiveImage(prescriptionImg);
}, function (error) {
setPrescriptionImg("invalid prescriptionImg", {
error: error
});
setIsLoadingPrescriptionData(false);
setActiveImageError(true);
});
}
}, [prescriptionImg]);
React.useEffect(function () {
if (adjustedPrescriptionImg) {
reactNative.Image.getSize(adjustedPrescriptionImg, function (width, height) {
console.log("valid adjustedPrescriptionImg", {
width: width,
height: height
});
}, function (error) {
setAdjustedPrescriptionImg("invalid adjustedPrescriptionImg", {
error: error
});
});
}
}, [adjustedPrescriptionImg]);
var fetchPrescription = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var prescriptionId, _yield$API$get, prescription;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
prescriptionId = props.navigation.state.params.prescriptionId;
_context.next = 3;
return API.get(APP_BASE_URL + "/v2/prescription/" + prescriptionId);
case 3:
_yield$API$get = _context.sent;
prescription = _yield$API$get.data.data;
setPrescriptionImg(prescription.img_url);
setIsPrescriptionAlreadyRedeemed(prescription.order_status !== null ? true : false);
setIsPrescriptionEligible(!!prescription.is_eligible);
if (prescription.has_prescription_adjustment === 1) {
setAdjustedPrescriptionImg(prescription.adjusted_img_url);
}
case 9:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function fetchPrescription() {
return _ref.apply(this, arguments);
};
}();
var showZoomIn = function showZoomIn() {
if (activeImage) {
setIsZoomIn(true);
} else {
reactNative.Alert.alert("Kesalahan", "Invalid Image Url");
}
};
var dismissZoomIn = function dismissZoomIn() {
setIsZoomIn(false);
};
var onBackButtonPressed = function onBackButtonPressed() {
props.navigation.navigate("PrescriptionHistory");
};
var onRedeemButtonPressed = function onRedeemButtonPressed() {
var _props$navigation$sta = props.navigation.state.params,
prescriptionId = _props$navigation$sta.prescriptionId,
customerName = _props$navigation$sta.customerName,
patientName = _props$navigation$sta.patientName,
cardNumber = _props$navigation$sta.cardNumber,
gender = _props$navigation$sta.gender,
pharmacy = _props$navigation$sta.pharmacy;
if (isPrescriptionAlreadyRedeemed) {
reactNative.Alert.alert("Kesalahan", "Resep sudah ditebus");
} else if (!isPrescriptionEligible) {
reactNative.Alert.alert("Resep tidak dapat ditebus", "Mohon maaf, resep hanya dapat ditebus maksimal 7 hari setelah konsultasi");
} else {
props.navigation.navigate("OrderMedicine", {
prescriptionId: prescriptionId,
customerName: customerName,
// this is used for avatar display
patientName: patientName,
// this is patient name used for prescription
cardNumber: cardNumber,
gender: gender,
pharmacy: pharmacy
});
}
};
var changeImage = function changeImage(imageUrl, buttonSelected) {
if (buttonSelected === "adjustedButton") {
setIsAdjustedPrescImgSelected(true);
setIsPrescImgSelected(false);
} else {
setIsAdjustedPrescImgSelected(false);
setIsPrescImgSelected(true);
}
if (imageUrl === "invalid image") {
setActiveImage();
setActiveImageError(true);
} else {
setActiveImage();
setActiveImageError();
setActiveImage(imageUrl);
}
};
var onDownloadButtonPressed = function onDownloadButtonPressed() {
if (activeImage) {
setIsDownloading(true);
savePrescription(activeImage).then(function (x) {
setIsDownloading(false);
});
} else {
reactNative.Alert.alert("Kesalahan", "Resep tidak dapat diunduh.");
}
};
var onLoadEnd = function onLoadEnd() {
setIsLoadingPrescriptionData(false);
setIsPrescriptionLoadedSuccessfully(true);
};
return /*#__PURE__*/React__default['default'].createElement(reactNative.ScrollView, {
style: {
flex: 1
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: props.themeColors.primary
}
}, /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: isZoomIn,
backdropColor: "grey",
onBackButtonPress: dismissZoomIn,
onBackdropPress: dismissZoomIn,
useNativeDriver: true
}, /*#__PURE__*/React__default['default'].createElement(AutoHeightImage__default['default'], {
alignSelf: "center",
source: {
uri: activeImage
},
width: width
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.header
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatarWithDetail, {
cardNumber: props.navigation.state.params.cardNumber,
fullName: props.navigation.state.params.customerName,
gender: props.navigation.state.params.gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
marginStart: 20
},
onPress: function onPress() {
return _this.scrollRef.scrollTo({
x: 0,
y: 500
});
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: 10,
alignSelf: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$1.prescriptionTitle
}, "RESEP OBAT")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$1.containerImageFeatures, {
marginRight: 20
}]
}, adjustedPrescriptionImg ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.containerImageFeatures
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$1.menu, styles$1.buttonMenu, {
marginRight: 15
}, isPrescImgSelected ? {
backgroundColor: props.themeColors.primary
} : styles$1.buttonMenuDisable]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return changeImage(prescriptionImg, "");
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$1.textButton, {
fontSize: 12
}]
}, "RESEP AWAL"))), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles$1.menu, styles$1.buttonMenu, isAdjustedPrescImgSelected ? {
backgroundColor: props.themeColors.primary
} : styles$1.buttonMenuDisable]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
return changeImage(adjustedPrescriptionImg, "adjustedButton");
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: [styles$1.textButton, {
fontSize: 12
}]
}, "RESEP BARU")))) : null, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: showZoomIn
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.menu
}, /*#__PURE__*/React__default['default'].createElement(EnlargeIcon, {
fill: "none",
stroke: props.themeColors.primary,
strokeWidth: "12",
style: styles$1.imageFeature
}))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onDownloadButtonPressed
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.menu
}, isDownloading ? /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: props.themeColors.primary
}) : /*#__PURE__*/React__default['default'].createElement(DownloadIcon, {
fill: "none",
stroke: props.themeColors.primary,
strokeWidth: "19",
style: styles$1.imageFeature
})))), isLoadingPrescriptionData ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: height$1 * 0.2,
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: props.themeColors.primary
})) : null, activeImage ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.containerImage
}, /*#__PURE__*/React__default['default'].createElement(AutoHeightImage__default['default'], {
source: {
uri: activeImage
},
width: isAdjustedPrescImgSelected ? reactNative.Dimensions.get("window").width * 0.9 : reactNative.Dimensions.get("window").width,
fadeDuration: 1000,
onLoadEnd: onLoadEnd
})), isPrescriptionLoadedSuccessfully ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.imageNote
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, null, "Resep hanya bisa ditebus satu kali")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.containerListButton
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onBackButtonPressed,
style: {
alignSelf: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.containerButton
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$1.textButton
}, "KEMBALI"))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onRedeemButtonPressed,
style: {
alignSelf: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [isPrescriptionAlreadyRedeemed || !isPrescriptionEligible ? styles$1.redeemButtonDisabled : styles$1.redeemButtonEnabled]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles$1.textButton
}, "TEBUS RESEP"))))) : null) : null, activeImageError ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: 10,
alignSelf: "center",
marginBottom: 30
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/fail.png"),
style: styles$1.iconFail
}), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles$1.imageNote
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, null, "Data resep gagal dimuat"))) : null)));
};
var styles$1 = reactNative.StyleSheet.create({
header: {
flexDirection: "row",
alignItems: "center",
padding: 20
},
prescriptionTitle: _extends({
fontSize: 24
}, fonts.bold, {
color: "#000",
width: 250,
textAlign: "center",
paddingVertical: 16
}),
containerImageFeatures: {
flexDirection: "row",
justifyContent: "flex-end",
marginBottom: 10
},
imageFeature: {
width: 25,
height: 27,
marginRight: 20
},
containerImage: {
marginRight: 30,
marginLeft: 30,
alignSelf: "center"
},
imageNote: {
alignSelf: "center",
marginVertical: 20
},
containerListButton: {
flexDirection: "row",
justifyContent: "space-between",
marginBottom: 10
},
containerButton: {
borderRadius: 30,
alignSelf: "flex-start",
backgroundColor: staticColors.red,
paddingVertical: 10,
paddingHorizontal: 35,
marginLeft: width * 0.1
},
textButton: _extends({}, fonts.bold, {
color: "#FFF",
textAlign: "center"
}),
redeemButtonEnabled: {
borderRadius: 30,
alignSelf: "flex-start",
backgroundColor: staticColors.forestFern,
paddingVertical: 10,
paddingHorizontal: 30,
marginRight: width * 0.1
},
redeemButtonDisabled: {
borderRadius: 30,
alignSelf: "flex-start",
backgroundColor: staticColors.grey,
paddingVertical: 10,
paddingHorizontal: 30,
marginRight: width * 0.1
},
iconFail: {
width: 250,
height: 250,
alignSelf: "center",
marginTop: 40,
marginBottom: 10
},
menu: {
borderRadius: 30,
alignSelf: "center",
paddingVertical: 3
},
buttonMenu: {
paddingHorizontal: 15,
marginRight: 10,
marginTop: 5
},
buttonMenuDisable: {
backgroundColor: staticColors.grey
}
});
var PrescriptionDetailScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors,
token: state.token
};
})(PrescriptionDetailScreen);
var _Dimensions$get = reactNative.Dimensions.get("window");
_Dimensions$get.width;
var height = _Dimensions$get.height;
var OrderMedicineScreen = function OrderMedicineScreen(props) {
var _useState = React.useState([]),
fulfillmentCenters = _useState[0],
setFulfillmentCenters = _useState[1];
var _useState2 = React.useState(""),
phone = _useState2[0],
setPhone = _useState2[1];
var _useState3 = React.useState(""),
fulfillmentCenterId = _useState3[0],
setFulfillmentCenterId = _useState3[1];
var _useState4 = React.useState(""),
fulfillmentCenterName = _useState4[0],
setFulfillmentCenterName = _useState4[1];
var _useState5 = React.useState(""),
pharmacyName = _useState5[0],
setPharmacyName = _useState5[1];
var _useState6 = React.useState(false),
isWaitingResponse = _useState6[0],
setIsWaitingResponse = _useState6[1];
var _useState7 = React.useState(false),
isPatientDataModalVisible = _useState7[0],
setIsPatientDataModalVisible = _useState7[1];
var _useState8 = React.useState(false),
isSuccessModalVisible = _useState8[0],
setIsSuccessModalVisible = _useState8[1];
var _useState9 = React.useState(false),
isFailModalVisible = _useState9[0],
setIsFailModalVisible = _useState9[1];
var _useState10 = React.useState(false),
hasErrorPhoneNumber = _useState10[0],
setHasErrorPhoneNumber = _useState10[1];
var _useState11 = React.useState(""),
descErrorPhoneNumber = _useState11[0],
setDescErrorPhoneNumber = _useState11[1];
var _useState12 = React.useState(false),
hasErrorFulfillmentCenter = _useState12[0],
setHasErrorFulfillmentCenter = _useState12[1];
var _useState13 = React.useState(""),
descErrorFulfillmentCenter = _useState13[0],
setDescErrorFulfillmentCenter = _useState13[1];
React.useEffect(function () {
var pharmacy = props.navigation.state.params.pharmacy;
setPharmacyName(pharmacy.pharmacy_name);
if (pharmacy.pharmacy_name === "Lifepack") {
buildLifepackFulfillmentCenter(pharmacy.fulfillment_center);
} else if (pharmacy.pharmacy_name === "Siloam") {
buildSiloamFulfillmentCenter(pharmacy.fulfillment_center);
} else ;
}, []);
React.useEffect(function () {
var pharmacy = props.navigation.state.params.pharmacy;
setPharmacyName(pharmacy.pharmacy_name);
if (pharmacy.pharmacy_name === "Lifepack") {
buildLifepackFulfillmentCenter(pharmacy.fulfillment_center);
} else if (pharmacy.pharmacy_name === "Siloam") {
buildSiloamFulfillmentCenter(pharmacy.fulfillment_center);
} else ;
}, []);
var onBackButtonPressed = function onBackButtonPressed() {
props.navigation.navigate("PrescriptionDetail");
};
var onOrderNowButtonPressed = function onOrderNowButtonPressed() {
var isPhoneValid = isPhoneNumberValid();
var isFlfillmentCenterValid = isFulfillmentCenterValid();
if (isPhoneValid && isFlfillmentCenterValid) {
setIsPatientDataModalVisible(true);
}
};
var isPhoneNumberValid = function isPhoneNumberValid() {
var valid = false;
var regex = /^(08\d{8,10})$|(\+62\d{9,11})$/;
if (phone == "") {
setHasErrorPhoneNumber(true);
setDescErrorPhoneNumber("Nomor HP tidak boleh kosong");
} else if (isNaN(phone)) {
setHasErrorPhoneNumber(true);
setDescErrorPhoneNumber("Nomor HP harus angka");
} else if (regex.test(phone) === false) {
setHasErrorPhoneNumber(true);
setDescErrorPhoneNumber("Format nomor HP salah");
} else {
valid = true;
setHasErrorPhoneNumber(false);
setDescErrorPhoneNumber("");
}
return valid;
};
var isFulfillmentCenterValid = function isFulfillmentCenterValid() {
var valid = false;
var foundMatchFC = findFulfillmentCenter(fulfillmentCenterId);
if (fulfillmentCenterId == "" || fulfillmentCenterName == "") {
setHasErrorFulfillmentCenter(true);
setDescErrorFulfillmentCenter("Lokasi tidak boleh kosong");
} else if (foundMatchFC <= 0) {
setHasErrorFulfillmentCenter(true);
setDescErrorFulfillmentCenter("Lokasi tidak ditemukan");
} else {
valid = true;
setHasErrorFulfillmentCenter(false);
setDescErrorFulfillmentCenter("");
}
return valid;
};
var buildSiloamFulfillmentCenter = function buildSiloamFulfillmentCenter(fulfillmentCenters) {
var listFulfillmentCenters = [];
___default['default'].each(fulfillmentCenters, function (item) {
var _ref, _item$city;
listFulfillmentCenters.push({
id: item.id,
name: (_ref = item.name + " - " + ((_item$city = item.city) == null ? void 0 : _item$city.name)) != null ? _ref : null
});
});
setFulfillmentCenters(listFulfillmentCenters);
};
var buildLifepackFulfillmentCenter = function buildLifepackFulfillmentCenter(fulfillmentCenters) {
var listFulfillmentCenters = [];
___default['default'].each(fulfillmentCenters, function (item) {
listFulfillmentCenters.push({
id: item.id,
name: item.name
});
});
setFulfillmentCenters(listFulfillmentCenters);
};
var onProcessOrderButtonPressed = function onProcessOrderButtonPressed() {
setIsPatientDataModalVisible(false);
submitOrderPrescription();
};
var onSubmitOrderPrescriptionSuccess = function onSubmitOrderPrescriptionSuccess() {
setIsSuccessModalVisible(true);
};
var onSubmitOrderPrescriptionFail = function onSubmitOrderPrescriptionFail() {
setIsFailModalVisible(true);
};
var onRetrySubmitOrderPrescription = function onRetrySubmitOrderPrescription() {
setIsFailModalVisible(false);
submitOrderPrescription();
};
var submitOrderPrescription = function submitOrderPrescription() {
setIsWaitingResponse(true);
sendOrderPrescriptionToServer();
};
var sendOrderPrescriptionToServer = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var prescriptionId, payload, _yield$API$post, _yield$API$post$data, prescriptionOrder, status;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
prescriptionId = props.navigation.state.params.prescriptionId;
payload = {
phone: phone,
fulfillment_center_id: fulfillmentCenterId
};
_context.prev = 2;
_context.next = 5;
return API.post(APP_BASE_URL + "/v2/prescription/" + prescriptionId + "/order", payload);
case 5:
_yield$API$post = _context.sent;
_yield$API$post$data = _yield$API$post.data;
prescriptionOrder = _yield$API$post$data.data;
status = _yield$API$post$data.status;
if (prescriptionOrder) {
if (status === "success") {
setTimeout(function () {
setIsWaitingResponse(false);
onSubmitOrderPrescriptionSuccess();
}, 350);
} else {
setTimeout(function () {
setIsWaitingResponse(false);
onSubmitOrderPrescriptionFail();
}, 350);
}
}
_context.next = 16;
break;
case 12:
_context.prev = 12;
_context.t0 = _context["catch"](2);
setIsWaitingResponse(false);
console.log((_context.t0 == null ? void 0 : _context.t0.response) || _context.t0);
case 16:
case "end":
return _context.stop();
}
}
}, _callee, null, [[2, 12]]);
}));
return function sendOrderPrescriptionToServer() {
return _ref2.apply(this, arguments);
};
}();
var goDoubleBack = function goDoubleBack() {
setIsSuccessModalVisible(false);
props.navigation.navigate("CustomerProfile");
};
var onPhoneTextChange = function onPhoneTextChange(phone) {
setPhone(phone);
setDescErrorPhoneNumber("");
setHasErrorPhoneNumber(false);
};
var onFulfillmentCenterSelected = function onFulfillmentCenterSelected(fulfillmentCenterId, fulfillmentCenterName) {
setFulfillmentCenterName(fulfillmentCenterName);
setFulfillmentCenterId(fulfillmentCenterId);
setHasErrorFulfillmentCenter(false);
setDescErrorFulfillmentCenter("");
};
var onFulfillmentCenterTextChange = function onFulfillmentCenterTextChange(fulfillmentCenterName) {
setFulfillmentCenterName(fulfillmentCenterName);
setHasErrorFulfillmentCenter(false);
setDescErrorFulfillmentCenter("");
};
var findFulfillmentCenter = function findFulfillmentCenter(fulfillmentCenterId) {
if (fulfillmentCenterId === "") {
return [];
}
return fulfillmentCenters.filter(function (fulfillmentCenter) {
return fulfillmentCenter.id.search(fulfillmentCenterId) >= 0;
});
};
var closeVerificationModal = function closeVerificationModal() {
setIsPatientDataModalVisible(false);
};
var closeSuccessModal = function closeSuccessModal() {
setIsSuccessModalVisible(false);
};
var closeFailModal = function closeFailModal() {
setIsFailModalVisible(false);
};
var closeLoadingModal = function closeLoadingModal() {
setIsWaitingResponse(false);
};
return /*#__PURE__*/React__default['default'].createElement(reactNative.KeyboardAvoidingView, {
behavior: "position",
keyboardVerticalOffset: 50
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableWithoutFeedback, {
onPress: reactNative.Keyboard.dismiss
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: props.themeColors.primary
}
}, isPatientDataModalVisible ? /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: true,
backdropColor: "#515151",
useNativeDriver: true,
onModalHide: closeVerificationModal,
onDismiss: closeVerificationModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerTitleModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.titleVerificationModal
}, "Apakah Anda yakin data yang dimasukkan sudah benar?"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.bodyVerificationModal
}, "Dengan menyetujui untuk proses resep, Anda telah melakukan pengecekan data pasien dan detail kontak untuk pengiriman."), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerListButtonsVerificationModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
setIsPatientDataModalVisible(false);
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles.buttonModal, {
backgroundColor: "#E64F4F",
paddingHorizontal: 25
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonModal
}, "KEMBALI"))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onProcessOrderButtonPressed
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles.buttonModal, {
backgroundColor: "#5DBE66",
paddingHorizontal: 17
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonModal
}, "PROSES RESEP")))))) : null, isSuccessModalVisible ? /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: true,
backdropColor: "#515151",
useNativeDriver: true,
onModalHide: closeSuccessModal,
onDismiss: closeSuccessModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerSuccessOrderModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/tick.png"),
style: styles.imgSuccessOrderModal
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.titleSuccessOrderModal
}, "Permintaan Resep Berhasil Dikirim"), pharmacyName === "Lifepack" ? /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textBodySuccessOrderModal
}, "Tim Apoteker kami akan melakukan pengecekan dan mengkonfirmasi melalui push notifikasi. Mohon untuk menunggu beberapa menit.") : /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textBodySuccessOrderModal
}, "Tim Apoteker kami akan melakukan pengecekan dan mengkonfirmasi pesanan melalui telepon/SMS/Whatsapp."), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerListButtonSuccessOrderModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: goDoubleBack
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles.buttonModal, {
backgroundColor: "#5DBE66",
paddingHorizontal: 40
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonModal
}, "SELESAI")))))) : null, isFailModalVisible ? /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: isFailModalVisible,
backdropColor: "#515151",
useNativeDriver: true,
onModalHide: closeFailModal,
onDismiss: closeFailModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerFailOrderModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Image, {
source: require("../assets/icons/fail.png"),
style: styles.imgFailOrderModal
}), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.titleFailOrderModal
}, "Permintaan Resep Gagal Dikirim"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textBodyFailOrderModal
}, "Silahkan coba kembali dalam beberapa saat"), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerListButtonsFailOrderModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: function onPress() {
setIsFailModalVisible(false);
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles.buttonModal, {
backgroundColor: "#E64F4F",
marginLeft: 10,
paddingHorizontal: 30
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonModal
}, "KEMBALI"))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onRetrySubmitOrderPrescription
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles.buttonModal, {
backgroundColor: "#5DBE66",
marginRight: 10,
paddingHorizontal: 25
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonModal
}, "COBA LAGI")))))) : null, isWaitingResponse ? /*#__PURE__*/React__default['default'].createElement(Modal__default['default'], {
isVisible: true,
backdropColor: "#ffffff",
useNativeDriver: true,
onModalHide: closeLoadingModal,
onDismiss: closeLoadingModal
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: [styles.containerTitleModal, {
backgroundColor: "rgba(0,0,0,0)",
alignItems: "center"
}]
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: props.themeColors.primary
}))) : null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.header
}, /*#__PURE__*/React__default['default'].createElement(PatientAvatarWithDetail, {
cardNumber: props.navigation.state.params.cardNumber,
fullName: props.navigation.state.params.customerName,
gender: props.navigation.state.params.gender
}), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
style: {
marginStart: 20
},
onPress: function onPress() {
return scrollRef.scrollTo({
x: 0,
y: 500
});
}
})), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
backgroundColor: "#FFF",
borderTopEndRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40,
borderTopStartRadius: reactNative.Platform.OS === "android" && reactNative.Platform.Version <= 26 ? 0 : 40
}
}, fulfillmentCenters.length <= 0 ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: height * 0.3,
alignItems: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.ActivityIndicator, {
size: "large",
color: props.themeColors.primary
})) : /*#__PURE__*/React__default['default'].createElement(reactNative.View, null, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerTitleOrderMedicine
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textTitleOrderMedicine
}, "PEMESANAN OBAT")), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerBodyOrderMedicine
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerInfo
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textBodyOrderMedicine
}, "Mohon untuk melengkapi data dibawah untuk kebutuhan pengiriman obat dan pembayaran.")), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textForm
}, "Nama Pasien"), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: {
color: "#000",
fontSize: 18,
paddingVertical: 7
}
}, props.navigation.state.params.patientName), /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textForm
}, "Nomor Ponsel"), /*#__PURE__*/React__default['default'].createElement(reactNative.TextInput, {
style: styles.inputTextForm,
placeholder: "e.g. 08XXXXXXXXX",
keyboardType: "phone-pad",
onChangeText: function onChangeText(phone) {
return onPhoneTextChange(phone);
}
}), hasErrorPhoneNumber ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: 5
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.error
}, descErrorPhoneNumber)) : null, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textForm
}, "Lokasi"), /*#__PURE__*/React__default['default'].createElement(SearchableDropdown__default['default'], {
onTextChange: function onTextChange(text) {
return onFulfillmentCenterTextChange(text);
},
onItemSelect: function onItemSelect(item) {
return onFulfillmentCenterSelected(item["id"], item["name"]);
},
containerStyle: styles.containerDropDown,
itemStyle: styles.itemDropDown,
itemTextStyle: styles.itemTextStyleDropDown,
itemsContainerStyle: {
maxHeight: 240
},
items: fulfillmentCenters,
textInputProps: {
placeholder: "e.g DKI JAKARTA",
underlineColorAndroid: "transparent",
style: {
padding: 5,
borderWidth: 1,
borderColor: "#ccc",
borderRadius: 10,
fontSize: 17,
height: 40
}
},
resetValue: false,
underlineColorAndroid: "transparent"
}), hasErrorFulfillmentCenter ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: 5
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.error
}, descErrorFulfillmentCenter)) : null, pharmacyName === "Siloam" ? /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: {
paddingTop: 20
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: {
color: staticColors.grey,
fontSize: 15,
textAlign: "justify"
}
}, "Untuk sementara hanya melayani pengantaran pada kota-kota diatas. Untuk daerah lainnya Anda dapat download resep dan menebusnya di apotek yang bekerja sama dengan Mandiri InHealth")) : null), /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.containerListButtonOrderMedicine
}, /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onBackButtonPressed,
style: {
alignSelf: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.buttonBackOrderMedicine
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonOrderMedicine
}, "KEMBALI"))), /*#__PURE__*/React__default['default'].createElement(reactNative.TouchableOpacity, {
onPress: onOrderNowButtonPressed,
style: {
alignSelf: "center"
}
}, /*#__PURE__*/React__default['default'].createElement(reactNative.View, {
style: styles.buttonOrderMedicine
}, /*#__PURE__*/React__default['default'].createElement(reactNative.Text, {
style: styles.textButtonOrderMedicine
}, "PESAN SEKARANG")))))))));
};
var styles = reactNative.StyleSheet.create({
header: {
flexDirection: "row",
alignItems: "center",
padding: 20
},
containerTitleModal: {
backgroundColor: "#FFFFFF",
borderRadius: 40,
padding: 30
},
titleVerificationModal: _extends({
color: "#808080",
fontSize: 20
}, fonts.bold, {
textAlign: "center"
}),
bodyVerificationModal: {
color: "#808080",
fontSize: 17,
textAlign: "center",
lineHeight: 20,
marginTop: 30,
marginVertical: 30
},
containerListButtonsVerificationModal: {
flexDirection: "row",
justifyContent: "space-between"
},
buttonModal: {
borderRadius: 20,
paddingVertical: 10
},
textButtonModal: _extends({
color: "#FFFFFF",
fontSize: 15
}, fonts.bold),
containerSuccessOrderModal: {
backgroundColor: "#FFFFFF",
borderRadius: 40,
padding: 15
},
imgSuccessOrderModal: {
width: 100,
height: 100,
alignSelf: "center",
marginTop: 20,
marginBottom: 10
},
titleSuccessOrderModal: _extends({
color: "#808080",
fontSize: 18
}, fonts.bold, {
textAlign: "center"
}),
textBodySuccessOrderModal: {
color: "#808080",
fontSize: 16,
textAlign: "center",
marginTop: 10
},
containerListButtonSuccessOrderModal: {
alignSelf: "center",
marginVertical: 15
},
containerFailOrderModal: {
backgroundColor: "#FFFFFF",
borderRadius: 40,
padding: 15
},
imgFailOrderModal: {
width: 100,
height: 100,
alignSelf: "center",
marginTop: 20,
marginBottom: 10
},
titleFailOrderModal: _extends({
color: "#808080",
fontSize: 20
}, fonts.bold, {
textAlign: "center"
}),
textBodyFailOrderModal: {
color: "#808080",
fontSize: 16,
textAlign: "center"
},
containerListButtonsFailOrderModal: {
flexDirection: "row",
justifyContent: "space-between",
marginVertical: 15
},
containerTitleOrderMedicine: {
paddingTop: 10,
alignSelf: "center"
},
textTitleOrderMedicine: _extends({
fontSize: 24
}, fonts.bold, {
color: "#000",
width: 250,
textAlign: "center",
paddingVertical: 7
}),
containerBodyOrderMedicine: {
paddingVertical: 7,
marginHorizontal: 20
},
containerInfo: {
paddingBottom: 5
},
textBodyOrderMedicine: {
fontSize: 18,
color: "#000",
paddingVertical: 5,
textAlign: "justify",
lineHeight: 20,
letterSpacing: 0.5
},
textForm: _extends({
fontSize: 18
}, fonts.bold, {
color: "#000",
width: 250,
paddingVertical: 7,
marginTop: 10
}),
inputTextForm: {
padding: 5,
height: 40,
borderColor: "gray",
borderWidth: 1,
textAlignVertical: "top",
fontSize: 18,
borderRadius: 10,
textTransform: "uppercase"
},
containerListButtonOrderMedicine: {
flexDirection: "row",
justifyContent: "space-between",
marginTop: 30
},
buttonBackOrderMedicine: {
borderRadius: 30,
alignSelf: "flex-start",
backgroundColor: staticColors.red,
paddingVertical: 12,
paddingHorizontal: 46,
marginLeft: 20
},
buttonOrderMedicine: {
borderRadius: 30,
alignSelf: "flex-start",
backgroundColor: staticColors.forestFern,
paddingVertical: 12,
paddingHorizontal: 20,
marginRight: 20
},
textButtonOrderMedicine: _extends({}, fonts.bold, {
color: "#FFF",
textAlign: "center"
}),
error: {
color: "red",
fontSize: 15
},
containerDropDown: {
borderColor: "gray",
borderWidth: 1,
fontSize: 18,
borderRadius: 10,
textTransform: "uppercase"
},
itemDropDown: {
padding: 10,
marginTop: 2,
backgroundColor: "#FAF9F8",
borderColor: "#bbb",
borderRadius: 10,
borderWidth: 1
},
itemTextStyleDropDown: {
color: "#222",
fontSize: 18
}
});
var OrderMedicineScreen$1 = reactRedux.connect(function (state) {
return {
themeColors: state.themeColors
};
})(OrderMedicineScreen);
var routeConfigMap = {
ask: AskScreen$1,
intro: IntroScreen$1,
Children: ChildrenScreen,
Consent: ConsentScreen$1,
dependencies: ChildrenScreen,
CustomerProfile: CustomerProfileScreen$1,
DoctorProfile: DoctorProfileScreen$1,
Medical: MedicalScreen$1,
MedicalCheck: MedicalCheck,
Rating: RatingScreen$1,
Symptoms: SymptomsScreen$1,
symptom: SymptomsScreen$1,
VideoCall: VideoCallScreen$1,
AudioCall: AudioCallScreen$1,
Waiting: WaitingScreen$1,
PreAssessment: PreAssessmentScreen$1,
PostAssessment: PostAssessmentScreen$1,
PrescriptionHistory: PrescriptionHistoryScreen$1,
PrescriptionHistoryDetail: PrescriptionHistoryDetailScreen$1,
PrescriptionHistoryDetailStatus: PrescriptionHistoryDetailStatusScreen$1,
PrescriptionDetail: PrescriptionDetailScreen$1,
OrderMedicine: OrderMedicineScreen$1
};
var stackConfig = {
headerMode: "none",
initialRouteName: "CustomerProfile"
};
I18n__default['default'].locale = "id";
I18n__default['default'].translations = internationalizations;
var PrixaNavigator = reactNavigationStack.createStackNavigator(routeConfigMap, stackConfig);
var PrixaContainer = reactNavigation.createAppContainer(PrixaNavigator);
var Prixa = /*#__PURE__*/function (_React$Component) {
_inheritsLoose(Prixa, _React$Component);
function Prixa(props) {
var _this;
_this = _React$Component.call(this, props) || this;
_defineProperty(_assertThisInitialized(_this), "handleNavigationStateChange", function (_prevNavigationState, nextNavigationState) {
var onDestinationChange = _this.props.onDestinationChange;
var mapping = {
Waiting: "Consultation"
};
var lastRoute = nextNavigationState.routes.slice(-1)[0];
var destination = mapping[lastRoute.routeName] || "Other";
onDestinationChange(destination);
});
var _this$props = _this.props,
devMode = _this$props.devMode,
fcmToken = _this$props.fcmToken,
introSlides = _this$props.introSlides,
showIntro = _this$props.showIntro,
themeColors = _this$props.themeColors,
token = _this$props.token;
setDevMode(devMode);
store.dispatch(changeFcmToken(fcmToken));
store.dispatch(changeThemeColors(themeColors));
store.dispatch(changeToken(token));
if (showIntro) {
store.dispatch(changeIntroSlides(introSlides));
}
return _this;
}
var _proto = Prixa.prototype;
_proto.render = function render() {
var _this$props2 = this.props,
intent = _this$props2.intent,
onClose = _this$props2.onClose,
onDestinationChange = _this$props2.onDestinationChange;
return /*#__PURE__*/React__default['default'].createElement(reactRedux.Provider, {
store: store
}, /*#__PURE__*/React__default['default'].createElement(PrixaContainer, {
onNavigationStateChange: this.handleNavigationStateChange,
screenProps: {
intent: intent,
onClose: onClose,
onDestinationChange: onDestinationChange
}
}));
};
return Prixa;
}(React__default['default'].Component);
_defineProperty(Prixa, "defaultProps", {
devMode: false,
fcmToken: null,
intent: null,
introSlides: [],
onClose: function onClose() {},
onDestinationChange: function onDestinationChange() {},
showIntro: true,
themeColors: {}
});
_defineProperty(Prixa, "propTypes", {
devMode: PropTypes__default['default'].bool,
fcmToken: PropTypes__default['default'].string,
intent: PropTypes__default['default'].shape({
action: PropTypes__default['default'].string.isRequired
}),
introSlides: PropTypes__default['default'].array,
onClose: PropTypes__default['default'].func,
onDestinationChange: PropTypes__default['default'].func,
showIntro: PropTypes__default['default'].bool,
themeColors: PropTypes__default['default'].shape({
darkerPrimary: PropTypes__default['default'].string,
darkestPrimary: PropTypes__default['default'].string,
lighterPrimary: PropTypes__default['default'].string,
lightestPrimary: PropTypes__default['default'].string,
primary: PropTypes__default['default'].string
}),
token: PropTypes__default['default'].string.isRequired
});
return Prixa;
})));
//# sourceMappingURL=prixa-telemedicine-rn-sdk.js.map