@equinor/mad-core
Version:
Core library for the Mobile App Delivery team
121 lines (118 loc) • 3.46 kB
JavaScript
import {
DisableableSwipeable
} from "./chunk-XJX4HQF2.js";
import {
ExpansionToggle
} from "./chunk-YWPELSTX.js";
import {
SwipeItem
} from "./chunk-BDKB5ELS.js";
import {
resolveMessageFromServiceMessage
} from "./chunk-SHKOH7MA.js";
import {
useServiceMessageState
} from "./chunk-DIITQCRW.js";
import {
__spreadProps,
__spreadValues
} from "./chunk-CWMXXUWU.js";
// src/components/service-message/ServiceMessageBanner.tsx
import React from "react";
import { LayoutAnimation, Linking, SafeAreaView, View } from "react-native";
import {
EDSStyleSheet,
PressableHighlight,
Typography,
useStyles
} from "@equinor/mad-components";
var ServiceMessageBanner = () => {
const styles = useStyles(theme);
const {
serviceMessage,
isDismissed,
setIsDismissed,
isExpanded,
setIsExpanded,
expansionEnabled,
setExpansionEnabled,
isError
} = useServiceMessageState();
const dismissAndURLIsVisible = !expansionEnabled || expansionEnabled && isExpanded;
const onPressServiceMessage = () => {
LayoutAnimation.configureNext(__spreadProps(__spreadValues({}, LayoutAnimation.Presets.easeInEaseOut), { duration: 100 }));
setIsExpanded((isExpanded2) => !isExpanded2);
};
if (isDismissed) return null;
if (!serviceMessage) return null;
const { message, url } = resolveMessageFromServiceMessage(serviceMessage, isError);
return /* @__PURE__ */ React.createElement(SafeAreaView, null, /* @__PURE__ */ React.createElement(
DisableableSwipeable,
{
disabled: !dismissAndURLIsVisible,
renderRightActions: () => /* @__PURE__ */ React.createElement(
SwipeItem,
{
title: "Remove",
iconName: "close",
color: "danger",
onPress: () => setIsDismissed(true)
}
)
},
/* @__PURE__ */ React.createElement(
PressableHighlight,
{
style: styles.container,
onPress: onPressServiceMessage,
disabled: !expansionEnabled
},
/* @__PURE__ */ React.createElement(View, { style: { flex: 1 } }, /* @__PURE__ */ React.createElement(
Typography,
{
color: styles.text.color,
numberOfLines: expansionEnabled && !isExpanded ? 2 : 0,
onTextLayout: (e) => {
if (e.nativeEvent.lines.length > 2) {
setExpansionEnabled(true);
}
}
},
message
), dismissAndURLIsVisible && /* @__PURE__ */ React.createElement(React.Fragment, null, url && /* @__PURE__ */ React.createElement(
Typography,
{
group: "interactive",
variant: "link",
style: styles.text,
onPress: () => void Linking.openURL(url)
},
url
), /* @__PURE__ */ React.createElement(
Typography,
{
variant: "label",
bold: true,
color: styles.text.color,
style: { marginTop: 8 }
},
"Swipe left to remove"
))),
expansionEnabled && /* @__PURE__ */ React.createElement(ExpansionToggle, { isExpanded })
)
));
};
var theme = EDSStyleSheet.create((themeStyles) => ({
container: {
backgroundColor: themeStyles.colors.container.warning,
padding: themeStyles.spacing.dialog.padding,
flexDirection: "row",
justifyContent: "space-between"
},
text: {
color: themeStyles.colors.text.feedbackWarning
}
}));
export {
ServiceMessageBanner
};