@sendbird/uikit-react-native-foundation 3.12.0 → 3.12.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/ImageWithPlaceholder/index.js +1 -1
- package/lib/commonjs/components/ImageWithPlaceholder/index.js.map +1 -1
- package/lib/commonjs/ui/Avatar/AvatarGroup.js +6 -4
- package/lib/commonjs/ui/Avatar/AvatarGroup.js.map +1 -1
- package/lib/commonjs/ui/Avatar/AvatarStack.js.map +1 -1
- package/lib/commonjs/ui/Dialog/index.js +3 -3
- package/lib/commonjs/ui/Dialog/index.js.map +1 -1
- package/lib/module/components/ImageWithPlaceholder/index.js +1 -1
- package/lib/module/components/ImageWithPlaceholder/index.js.map +1 -1
- package/lib/module/ui/Avatar/AvatarGroup.js +6 -4
- package/lib/module/ui/Avatar/AvatarGroup.js.map +1 -1
- package/lib/module/ui/Avatar/AvatarStack.js.map +1 -1
- package/lib/module/ui/Dialog/index.js +3 -3
- package/lib/module/ui/Dialog/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/ImageWithPlaceholder/index.tsx +1 -1
- package/src/ui/Avatar/AvatarGroup.tsx +11 -3
- package/src/ui/Avatar/AvatarStack.tsx +7 -2
- package/src/ui/Dialog/index.tsx +3 -3
|
@@ -19,7 +19,7 @@ const useRetry = (hasError, retryCount = 5) => {
|
|
|
19
19
|
if (_reactNative.Platform.OS === 'android') return '';
|
|
20
20
|
const forceUpdate = (0, _uikitUtils.useForceUpdate)();
|
|
21
21
|
const retryCountRef = (0, _react.useRef)(1);
|
|
22
|
-
const retryTimeoutRef = (0, _react.useRef)();
|
|
22
|
+
const retryTimeoutRef = (0, _react.useRef)(undefined);
|
|
23
23
|
(0, _react.useEffect)(() => {
|
|
24
24
|
if (hasError) {
|
|
25
25
|
const reloadReservation = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitUtils","_createStyleSheet","_interopRequireDefault","_useUIKitTheme","_Box","_Icon","_Image","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useRetry","hasError","retryCount","Platform","OS","forceUpdate","useForceUpdate","retryCountRef","useRef","retryTimeoutRef","useEffect","reloadReservation","current","setTimeout","clearTimeout","ImageWithPlaceholder","props","palette","select","colors","useUIKitTheme","imageNotFound","setImageNotFound","useState","key","createElement","style","overflow","width","height","backgroundColor","dark","background400","light","background100","source","StyleSheet","absoluteFill","styles","hide","resizeMode","resizeMethod","onError","onLoad","containerStyle","icon","size","color","onBackground02","createStyleSheet","display","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Platform, StyleProp, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport createStyleSheet from '../../styles/createStyleSheet';\nimport useUIKitTheme from '../../theme/useUIKitTheme';\nimport Box from '../Box';\nimport Icon from '../Icon';\nimport Image from '../Image';\n\nconst useRetry = (hasError: boolean, retryCount = 5) => {\n // NOTE: Glide(fast-image) will retry automatically on Android\n if (Platform.OS === 'android') return '';\n\n const forceUpdate = useForceUpdate();\n const retryCountRef = useRef(1);\n const retryTimeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (hasError) {\n const reloadReservation = () => {\n if (retryCountRef.current < retryCount) {\n retryTimeoutRef.current = setTimeout(() => {\n retryCountRef.current++;\n reloadReservation();\n forceUpdate();\n }, retryCountRef.current * 5000);\n }\n };\n\n return reloadReservation();\n } else {\n return clearTimeout(retryTimeoutRef.current);\n }\n }, [hasError]);\n\n return retryCountRef.current;\n};\n\ntype Props = {\n source: number | { uri: string };\n width?: number | `${number}%`;\n height?: number | `${number}%`;\n style?: StyleProp<ViewStyle>;\n};\nconst ImageWithPlaceholder = (props: Props) => {\n const { palette, select, colors } = useUIKitTheme();\n const [imageNotFound, setImageNotFound] = useState(false);\n\n const key = useRetry(imageNotFound);\n return (\n <Box\n style={[{ overflow: 'hidden', width: props.width, height: props.height }, props.style]}\n backgroundColor={select({ dark: palette.background400, light: palette.background100 })}\n >\n <Image\n key={key}\n source={props.source}\n style={[StyleSheet.absoluteFill, imageNotFound && styles.hide]}\n resizeMode={'cover'}\n resizeMethod={'resize'}\n onError={() => setImageNotFound(true)}\n onLoad={() => setImageNotFound(false)}\n />\n {imageNotFound && (\n <Icon\n containerStyle={StyleSheet.absoluteFill}\n icon={'thumbnail-none'}\n size={48}\n color={colors.onBackground02}\n />\n )}\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n hide: {\n display: 'none',\n },\n});\n\nexport default ImageWithPlaceholder;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAEA,IAAAG,iBAAA,GAAAC,sBAAA,CAAAJ,OAAA;AACA,IAAAK,cAAA,GAAAD,sBAAA,CAAAJ,OAAA;AACA,IAAAM,IAAA,GAAAF,sBAAA,CAAAJ,OAAA;AACA,IAAAO,KAAA,GAAAH,sBAAA,CAAAJ,OAAA;AACA,IAAAQ,MAAA,GAAAJ,sBAAA,CAAAJ,OAAA;AAA6B,SAAAI,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAV,wBAAAU,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAd,uBAAA,YAAAA,CAAAU,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAE7B,MAAMgB,QAAQ,GAAGA,CAACC,QAAiB,EAAEC,UAAU,GAAG,CAAC,KAAK;EACtD;EACA,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE;EAExC,MAAMC,WAAW,GAAG,IAAAC,0BAAc,EAAC,CAAC;EACpC,MAAMC,aAAa,GAAG,IAAAC,aAAM,EAAC,CAAC,CAAC;EAC/B,MAAMC,eAAe,GAAG,IAAAD,aAAM,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_uikitUtils","_createStyleSheet","_interopRequireDefault","_useUIKitTheme","_Box","_Icon","_Image","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useRetry","hasError","retryCount","Platform","OS","forceUpdate","useForceUpdate","retryCountRef","useRef","retryTimeoutRef","undefined","useEffect","reloadReservation","current","setTimeout","clearTimeout","ImageWithPlaceholder","props","palette","select","colors","useUIKitTheme","imageNotFound","setImageNotFound","useState","key","createElement","style","overflow","width","height","backgroundColor","dark","background400","light","background100","source","StyleSheet","absoluteFill","styles","hide","resizeMode","resizeMethod","onError","onLoad","containerStyle","icon","size","color","onBackground02","createStyleSheet","display","_default","exports"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Platform, StyleProp, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport createStyleSheet from '../../styles/createStyleSheet';\nimport useUIKitTheme from '../../theme/useUIKitTheme';\nimport Box from '../Box';\nimport Icon from '../Icon';\nimport Image from '../Image';\n\nconst useRetry = (hasError: boolean, retryCount = 5) => {\n // NOTE: Glide(fast-image) will retry automatically on Android\n if (Platform.OS === 'android') return '';\n\n const forceUpdate = useForceUpdate();\n const retryCountRef = useRef(1);\n const retryTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n useEffect(() => {\n if (hasError) {\n const reloadReservation = () => {\n if (retryCountRef.current < retryCount) {\n retryTimeoutRef.current = setTimeout(() => {\n retryCountRef.current++;\n reloadReservation();\n forceUpdate();\n }, retryCountRef.current * 5000);\n }\n };\n\n return reloadReservation();\n } else {\n return clearTimeout(retryTimeoutRef.current);\n }\n }, [hasError]);\n\n return retryCountRef.current;\n};\n\ntype Props = {\n source: number | { uri: string };\n width?: number | `${number}%`;\n height?: number | `${number}%`;\n style?: StyleProp<ViewStyle>;\n};\nconst ImageWithPlaceholder = (props: Props) => {\n const { palette, select, colors } = useUIKitTheme();\n const [imageNotFound, setImageNotFound] = useState(false);\n\n const key = useRetry(imageNotFound);\n return (\n <Box\n style={[{ overflow: 'hidden', width: props.width, height: props.height }, props.style]}\n backgroundColor={select({ dark: palette.background400, light: palette.background100 })}\n >\n <Image\n key={key}\n source={props.source}\n style={[StyleSheet.absoluteFill, imageNotFound && styles.hide]}\n resizeMode={'cover'}\n resizeMethod={'resize'}\n onError={() => setImageNotFound(true)}\n onLoad={() => setImageNotFound(false)}\n />\n {imageNotFound && (\n <Icon\n containerStyle={StyleSheet.absoluteFill}\n icon={'thumbnail-none'}\n size={48}\n color={colors.onBackground02}\n />\n )}\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n hide: {\n display: 'none',\n },\n});\n\nexport default ImageWithPlaceholder;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -30,10 +30,12 @@ const AvatarGroup = ({
|
|
|
30
30
|
return ((_React$Children$map = _react.default.Children.map(children, (child, index) => {
|
|
31
31
|
if (index + 1 > MAX) return child;
|
|
32
32
|
if (! /*#__PURE__*/_react.default.isValidElement(child)) return child;
|
|
33
|
-
if (childAmount === 1)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
if (childAmount === 1) {
|
|
34
|
+
return /*#__PURE__*/_react.default.cloneElement(child, {
|
|
35
|
+
size,
|
|
36
|
+
containerStyle
|
|
37
|
+
});
|
|
38
|
+
}
|
|
37
39
|
const top = getTopPoint(index, childAmount) * size;
|
|
38
40
|
const start = getStartPoint(index) * size;
|
|
39
41
|
const width = getWidthPoint(index, childAmount) * size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","e","__esModule","default","MAX","AvatarGroup","children","containerStyle","size","childAmount","React","Children","count","createElement","View","style","overflow","width","height","borderRadius","backgroundColor","renderAvatars","_React$Children$map","map","child","index","isValidElement","cloneElement","top","getTopPoint","start","getStartPoint","getWidthPoint","getHeightPoint","innerStart","getInnerStart","innerTop","getInnerTop","position","square","slice","_","total","idx","_default","exports"],"sources":["AvatarGroup.tsx"],"sourcesContent":["import React
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","e","__esModule","default","MAX","AvatarGroup","children","containerStyle","size","childAmount","React","Children","count","createElement","View","style","overflow","width","height","borderRadius","backgroundColor","renderAvatars","_React$Children$map","map","child","index","isValidElement","cloneElement","top","getTopPoint","start","getStartPoint","getWidthPoint","getHeightPoint","innerStart","getInnerStart","innerTop","getInnerTop","position","square","slice","_","total","idx","_default","exports"],"sources":["AvatarGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleProp, View, ViewStyle } from 'react-native';\n\nconst MAX = 4;\n\ntype AvatarChildProps = {\n size?: number;\n square?: boolean;\n containerStyle?: StyleProp<ViewStyle>;\n};\n\ntype Props = React.PropsWithChildren<{\n size?: number;\n containerStyle?: StyleProp<ViewStyle>;\n}>;\nconst AvatarGroup = ({ children, containerStyle, size = 56 }: Props) => {\n const childAmount = React.Children.count(children);\n\n if (childAmount === 0) {\n return (\n <View\n style={[\n containerStyle,\n {\n overflow: 'hidden',\n width: size,\n height: size,\n borderRadius: size,\n backgroundColor: 'rgba(120,120,120,0.2)',\n },\n ]}\n />\n );\n }\n\n const renderAvatars = () => {\n return (\n React.Children.map(children, (child, index) => {\n if (index + 1 > MAX) return child;\n if (!React.isValidElement(child)) return child;\n\n if (childAmount === 1) {\n return React.cloneElement(child as React.ReactElement<AvatarChildProps>, { size, containerStyle });\n }\n\n const top = getTopPoint(index, childAmount) * size;\n const start = getStartPoint(index) * size;\n const width = getWidthPoint(index, childAmount) * size;\n const height = getHeightPoint(index, childAmount) * size;\n const innerStart = -getInnerStart(index, childAmount) * size;\n const innerTop = -getInnerTop(childAmount) * size;\n\n return (\n <View style={{ overflow: 'hidden', position: 'absolute', top, start, width, height }}>\n {React.cloneElement(child as React.ReactElement<AvatarChildProps>, {\n size,\n square: true,\n containerStyle: { start: innerStart, top: innerTop },\n })}\n </View>\n );\n })?.slice(0, 4) ?? []\n );\n };\n\n return (\n <View style={[containerStyle, { overflow: 'hidden', width: size, height: size, borderRadius: size }]}>\n {renderAvatars()}\n </View>\n );\n};\n\nconst getHeightPoint = (_: number, total: number) => {\n if (total === 2) return 1;\n return 0.5;\n};\nconst getWidthPoint = (idx: number, total: number) => {\n if (total === 3 && idx === 0) return 1;\n return 0.5;\n};\nconst getTopPoint = (idx: number, total: number) => {\n if (total === 2) return 0;\n if (total === 3 && idx === 0) return -0.025;\n if (total === 3 && idx !== 0) return 0.525;\n if (idx === 0 || idx === 1) return -0.025;\n return 0.525;\n};\nconst getStartPoint = (idx: number) => {\n if (idx === 0 || idx === 2) return -0.025;\n return 0.525;\n};\nconst getInnerStart = (idx: number, total: number) => {\n if (total === 3 && idx === 0) return 0;\n return 0.25;\n};\nconst getInnerTop = (total: number) => {\n if (total === 2) return 0;\n return 0.25;\n};\n\nexport default AvatarGroup;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_Text","_useUIKitTheme","e","__esModule","default","DEFAULT_MAX","DEFAULT_BORDER_WIDTH","DEFAULT_AVATAR_GAP","DEFAULT_AVATAR_SIZE","DEFAULT_REMAINS_MAX","AvatarStack","children","containerStyle","styles","maxAvatar","size","avatarGap","colors","palette","select","useUIKitTheme","defaultStyles","borderWidth","borderColor","background","remainsTextColor","onBackground02","remainsBackgroundColor","light","background100","dark","background600","avatarStyles","childrenArray","React","Children","toArray","filter","it","isValidElement","remains","length","shouldRenderRemains","actualSize","actualGap","renderAvatars","slice","map","child","index","cloneElement","start","renderRemainsCount","createElement","View","style","width","height","borderRadius","alignItems","justifyContent","backgroundColor","color","fontSize","caption4","Math","min","calculateWidth","widthEach","avatarCountOffset","avatarCount","count","flexDirection","_default","exports"],"sources":["AvatarStack.tsx"],"sourcesContent":["import React
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_Text","_useUIKitTheme","e","__esModule","default","DEFAULT_MAX","DEFAULT_BORDER_WIDTH","DEFAULT_AVATAR_GAP","DEFAULT_AVATAR_SIZE","DEFAULT_REMAINS_MAX","AvatarStack","children","containerStyle","styles","maxAvatar","size","avatarGap","colors","palette","select","useUIKitTheme","defaultStyles","borderWidth","borderColor","background","remainsTextColor","onBackground02","remainsBackgroundColor","light","background100","dark","background600","avatarStyles","childrenArray","React","Children","toArray","filter","it","isValidElement","remains","length","shouldRenderRemains","actualSize","actualGap","renderAvatars","slice","map","child","index","cloneElement","start","renderRemainsCount","createElement","View","style","width","height","borderRadius","alignItems","justifyContent","backgroundColor","color","fontSize","caption4","Math","min","calculateWidth","widthEach","avatarCountOffset","avatarCount","count","flexDirection","_default","exports"],"sources":["AvatarStack.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleProp, View, ViewStyle } from 'react-native';\n\nimport Text from '../../components/Text';\nimport useUIKitTheme from '../../theme/useUIKitTheme';\n\ntype AvatarChildProps = {\n size?: number;\n containerStyle?: StyleProp<ViewStyle>;\n};\n\nconst DEFAULT_MAX = 3;\nconst DEFAULT_BORDER_WIDTH = 2;\nconst DEFAULT_AVATAR_GAP = -4;\nconst DEFAULT_AVATAR_SIZE = 26;\nconst DEFAULT_REMAINS_MAX = 99;\n\ntype Props = React.PropsWithChildren<{\n size?: number;\n containerStyle?: StyleProp<ViewStyle>;\n maxAvatar?: number;\n avatarGap?: number;\n styles?: {\n borderWidth?: number;\n borderColor?: string;\n remainsTextColor?: string;\n remainsBackgroundColor?: string;\n };\n}>;\n\nconst AvatarStack = ({\n children,\n containerStyle,\n styles,\n maxAvatar = DEFAULT_MAX,\n size = DEFAULT_AVATAR_SIZE,\n avatarGap = DEFAULT_AVATAR_GAP,\n}: Props) => {\n const { colors, palette, select } = useUIKitTheme();\n const defaultStyles = {\n borderWidth: DEFAULT_BORDER_WIDTH,\n borderColor: colors.background,\n remainsTextColor: colors.onBackground02,\n remainsBackgroundColor: select({ light: palette.background100, dark: palette.background600 }),\n };\n const avatarStyles = { ...defaultStyles, ...styles };\n\n const childrenArray = React.Children.toArray(children).filter((it) => React.isValidElement(it));\n const remains = childrenArray.length - maxAvatar;\n const shouldRenderRemains = remains > 0;\n\n const actualSize = size + avatarStyles.borderWidth * 2;\n const actualGap = avatarGap - avatarStyles.borderWidth;\n\n const renderAvatars = () => {\n return childrenArray.slice(0, maxAvatar).map((child, index) =>\n React.cloneElement(child as React.ReactElement<AvatarChildProps>, {\n size: actualSize,\n containerStyle: {\n start: actualGap * index,\n borderWidth: avatarStyles.borderWidth,\n borderColor: avatarStyles.borderColor,\n },\n }),\n );\n };\n\n const renderRemainsCount = () => {\n if (!shouldRenderRemains) return null;\n return (\n <View\n style={[\n avatarStyles,\n {\n start: actualGap * maxAvatar,\n width: actualSize,\n height: actualSize,\n borderRadius: actualSize / 2,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: avatarStyles.remainsBackgroundColor,\n },\n ]}\n >\n <Text style={{ color: avatarStyles.remainsTextColor, fontSize: 8 }} caption4>\n {`+${Math.min(remains, DEFAULT_REMAINS_MAX)}`}\n </Text>\n </View>\n );\n };\n\n const calculateWidth = () => {\n const widthEach = actualSize + actualGap;\n const avatarCountOffset = shouldRenderRemains ? 1 : 0;\n const avatarCount = shouldRenderRemains ? maxAvatar : childrenArray.length;\n const count = avatarCount + avatarCountOffset;\n return widthEach * count + avatarStyles.borderWidth;\n };\n\n return (\n <View style={[containerStyle, { start: -avatarStyles.borderWidth, flexDirection: 'row', width: calculateWidth() }]}>\n {renderAvatars()}\n {renderRemainsCount()}\n </View>\n );\n};\n\nexport default AvatarStack;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -22,8 +22,8 @@ const DialogProvider = ({
|
|
|
22
22
|
children
|
|
23
23
|
}) => {
|
|
24
24
|
var _workingDialogJob$cur, _workingDialogJob$cur2, _defaultLabels$alert, _workingDialogJob$cur3, _defaultLabels$prompt, _defaultLabels$prompt2, _defaultLabels$prompt3, _workingDialogJob$cur4;
|
|
25
|
-
const waitDismissTimeout = (0, _react.useRef)();
|
|
26
|
-
const waitDismissPromise = (0, _react.useRef)();
|
|
25
|
+
const waitDismissTimeout = (0, _react.useRef)(undefined);
|
|
26
|
+
const waitDismissPromise = (0, _react.useRef)(undefined);
|
|
27
27
|
const waitDismiss = (0, _react.useCallback)(resolver => {
|
|
28
28
|
waitDismissPromise.current = resolver;
|
|
29
29
|
waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);
|
|
@@ -36,7 +36,7 @@ const DialogProvider = ({
|
|
|
36
36
|
}, []);
|
|
37
37
|
const render = (0, _uikitUtils.useForceUpdate)();
|
|
38
38
|
const dialogQueue = (0, _react.useRef)([]);
|
|
39
|
-
const workingDialogJob = (0, _react.useRef)();
|
|
39
|
+
const workingDialogJob = (0, _react.useRef)(undefined);
|
|
40
40
|
const visibleState = (0, _react.useRef)(false);
|
|
41
41
|
const isProcessing = () => Boolean(workingDialogJob.current);
|
|
42
42
|
const updateToShow = (0, _react.useCallback)(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_ActionMenu","_interopRequireDefault","_Alert","_BottomSheet","_Prompt","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AlertContext","React","createContext","ActionMenuContext","PromptContext","BottomSheetContext","DISMISS_TIMEOUT","DialogProvider","defaultLabels","children","_workingDialogJob$cur","_workingDialogJob$cur2","_defaultLabels$alert","_workingDialogJob$cur3","_defaultLabels$prompt","_defaultLabels$prompt2","_defaultLabels$prompt3","_workingDialogJob$cur4","waitDismissTimeout","useRef","waitDismissPromise","waitDismiss","useCallback","resolver","current","setTimeout","completeDismiss","clearTimeout","undefined","render","useForceUpdate","dialogQueue","workingDialogJob","visibleState","isProcessing","Boolean","updateToShow","updateToHide","Promise","resolve","consumeQueue","job","shift","createJob","type","props","jobItem","push","alert","openMenu","openPrompt","openSheet","createElement","Provider","value","onHide","onDismiss","visible","title","menuItems","message","buttons","text","ok","onSubmit","defaultValue","submitLabel","prompt","cancelLabel","cancel","placeholder","sheetItems","HeaderComponent","exports","useActionMenu","context","useContext","Error","useAlert","usePrompt","useBottomSheet"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { ActionMenuItem } from '../ActionMenu';\nimport ActionMenu from '../ActionMenu';\nimport type { AlertItem } from '../Alert';\nimport Alert from '../Alert';\nimport type { BottomSheetItem } from '../BottomSheet';\nimport BottomSheet from '../BottomSheet';\nimport type { PromptItem } from '../Prompt';\nimport Prompt from '../Prompt';\n\ntype DialogJob =\n | {\n type: 'ActionMenu';\n props: ActionMenuItem;\n }\n | {\n type: 'Alert';\n props: AlertItem;\n }\n | {\n type: 'Prompt';\n props: PromptItem;\n }\n | {\n type: 'BottomSheet';\n props: BottomSheetItem;\n };\n\ntype DialogPropsBy<T extends DialogJob['type'], U extends DialogJob = DialogJob> = U extends { type: T; props: infer P }\n ? P\n : never;\n\ntype DialogContextType = {\n openMenu: (props: DialogPropsBy<'ActionMenu'>) => void;\n alert: (props: DialogPropsBy<'Alert'>) => void;\n openPrompt: (props: DialogPropsBy<'Prompt'>) => void;\n openSheet: (props: DialogPropsBy<'BottomSheet'>) => void;\n};\n\nconst AlertContext = React.createContext<Pick<DialogContextType, 'alert'> | null>(null);\nconst ActionMenuContext = React.createContext<Pick<DialogContextType, 'openMenu'> | null>(null);\nconst PromptContext = React.createContext<Pick<DialogContextType, 'openPrompt'> | null>(null);\nconst BottomSheetContext = React.createContext<Pick<DialogContextType, 'openSheet'> | null>(null);\n\ntype Props = React.PropsWithChildren<{\n defaultLabels?: {\n alert?: { ok?: string };\n prompt?: { placeholder?: string; ok?: string; cancel?: string };\n };\n}>;\nconst DISMISS_TIMEOUT = 3000;\nexport const DialogProvider = ({ defaultLabels, children }: Props) => {\n const waitDismissTimeout = useRef<NodeJS.Timeout>();\n const waitDismissPromise = useRef<() => void>();\n const waitDismiss = useCallback((resolver: () => void) => {\n waitDismissPromise.current = resolver;\n waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);\n }, []);\n const completeDismiss = useCallback(() => {\n if (waitDismissTimeout.current) clearTimeout(waitDismissTimeout.current);\n if (waitDismissPromise.current) waitDismissPromise.current();\n waitDismissTimeout.current = undefined;\n waitDismissPromise.current = undefined;\n }, []);\n\n const render = useForceUpdate();\n const dialogQueue = useRef<DialogJob[]>([]);\n const workingDialogJob = useRef<DialogJob>();\n const visibleState = useRef(false);\n\n const isProcessing = () => Boolean(workingDialogJob.current);\n const updateToShow = useCallback(() => {\n visibleState.current = true;\n render();\n }, []);\n const updateToHide = useCallback((): Promise<void> => {\n return new Promise((resolve) => {\n visibleState.current = false;\n render();\n waitDismiss(resolve);\n });\n }, []);\n const consumeQueue = useCallback(() => {\n completeDismiss();\n const job = dialogQueue.current.shift();\n if (job) {\n workingDialogJob.current = job;\n updateToShow();\n } else {\n workingDialogJob.current = undefined;\n }\n }, []);\n\n const createJob =\n <T extends DialogJob['type']>(type: T) =>\n (props: DialogPropsBy<T>) => {\n const jobItem = { type, props } as DialogJob;\n if (isProcessing()) dialogQueue.current.push(jobItem);\n else {\n workingDialogJob.current = jobItem;\n updateToShow();\n }\n };\n\n const alert = useCallback(createJob('Alert'), []);\n const openMenu = useCallback(createJob('ActionMenu'), []);\n const openPrompt = useCallback(createJob('Prompt'), []);\n const openSheet = useCallback(createJob('BottomSheet'), []);\n\n return (\n <AlertContext.Provider value={{ alert }}>\n <ActionMenuContext.Provider value={{ openMenu }}>\n <PromptContext.Provider value={{ openPrompt }}>\n <BottomSheetContext.Provider value={{ openSheet }}>\n {children}\n {workingDialogJob.current?.type === 'ActionMenu' && (\n <ActionMenu\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n menuItems={workingDialogJob.current.props.menuItems}\n />\n )}\n {workingDialogJob.current?.type === 'Alert' && (\n <Alert\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n message={workingDialogJob.current.props.message}\n buttons={workingDialogJob.current.props.buttons ?? [{ text: defaultLabels?.alert?.ok || 'OK' }]}\n />\n )}\n {workingDialogJob.current?.type === 'Prompt' && (\n <Prompt\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n onSubmit={workingDialogJob.current.props.onSubmit}\n defaultValue={workingDialogJob.current.props.defaultValue}\n submitLabel={workingDialogJob.current.props.submitLabel ?? defaultLabels?.prompt?.ok}\n cancelLabel={workingDialogJob.current.props.cancelLabel ?? defaultLabels?.prompt?.cancel}\n placeholder={workingDialogJob.current.props.placeholder ?? defaultLabels?.prompt?.placeholder}\n />\n )}\n {workingDialogJob.current?.type === 'BottomSheet' && (\n <BottomSheet\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n sheetItems={workingDialogJob.current.props.sheetItems}\n HeaderComponent={workingDialogJob.current.props.HeaderComponent}\n />\n )}\n </BottomSheetContext.Provider>\n </PromptContext.Provider>\n </ActionMenuContext.Provider>\n </AlertContext.Provider>\n );\n};\n\nexport const useActionMenu = () => {\n const context = useContext(ActionMenuContext);\n if (!context) throw new Error('ActionMenuContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useAlert = () => {\n const context = useContext(AlertContext);\n if (!context) throw new Error('AlertContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const usePrompt = () => {\n const context = useContext(PromptContext);\n if (!context) throw new Error('PromptContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useBottomSheet = () => {\n const context = useContext(BottomSheetContext);\n if (!context) throw new Error('BottomSheetContext is not provided, wrap your app with DialogProvider');\n return context;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_ActionMenu","_interopRequireDefault","_Alert","_BottomSheet","_Prompt","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AlertContext","React","createContext","ActionMenuContext","PromptContext","BottomSheetContext","DISMISS_TIMEOUT","DialogProvider","defaultLabels","children","_workingDialogJob$cur","_workingDialogJob$cur2","_defaultLabels$alert","_workingDialogJob$cur3","_defaultLabels$prompt","_defaultLabels$prompt2","_defaultLabels$prompt3","_workingDialogJob$cur4","waitDismissTimeout","useRef","undefined","waitDismissPromise","waitDismiss","useCallback","resolver","current","setTimeout","completeDismiss","clearTimeout","render","useForceUpdate","dialogQueue","workingDialogJob","visibleState","isProcessing","Boolean","updateToShow","updateToHide","Promise","resolve","consumeQueue","job","shift","createJob","type","props","jobItem","push","alert","openMenu","openPrompt","openSheet","createElement","Provider","value","onHide","onDismiss","visible","title","menuItems","message","buttons","text","ok","onSubmit","defaultValue","submitLabel","prompt","cancelLabel","cancel","placeholder","sheetItems","HeaderComponent","exports","useActionMenu","context","useContext","Error","useAlert","usePrompt","useBottomSheet"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { ActionMenuItem } from '../ActionMenu';\nimport ActionMenu from '../ActionMenu';\nimport type { AlertItem } from '../Alert';\nimport Alert from '../Alert';\nimport type { BottomSheetItem } from '../BottomSheet';\nimport BottomSheet from '../BottomSheet';\nimport type { PromptItem } from '../Prompt';\nimport Prompt from '../Prompt';\n\ntype DialogJob =\n | {\n type: 'ActionMenu';\n props: ActionMenuItem;\n }\n | {\n type: 'Alert';\n props: AlertItem;\n }\n | {\n type: 'Prompt';\n props: PromptItem;\n }\n | {\n type: 'BottomSheet';\n props: BottomSheetItem;\n };\n\ntype DialogPropsBy<T extends DialogJob['type'], U extends DialogJob = DialogJob> = U extends { type: T; props: infer P }\n ? P\n : never;\n\ntype DialogContextType = {\n openMenu: (props: DialogPropsBy<'ActionMenu'>) => void;\n alert: (props: DialogPropsBy<'Alert'>) => void;\n openPrompt: (props: DialogPropsBy<'Prompt'>) => void;\n openSheet: (props: DialogPropsBy<'BottomSheet'>) => void;\n};\n\nconst AlertContext = React.createContext<Pick<DialogContextType, 'alert'> | null>(null);\nconst ActionMenuContext = React.createContext<Pick<DialogContextType, 'openMenu'> | null>(null);\nconst PromptContext = React.createContext<Pick<DialogContextType, 'openPrompt'> | null>(null);\nconst BottomSheetContext = React.createContext<Pick<DialogContextType, 'openSheet'> | null>(null);\n\ntype Props = React.PropsWithChildren<{\n defaultLabels?: {\n alert?: { ok?: string };\n prompt?: { placeholder?: string; ok?: string; cancel?: string };\n };\n}>;\nconst DISMISS_TIMEOUT = 3000;\nexport const DialogProvider = ({ defaultLabels, children }: Props) => {\n const waitDismissTimeout = useRef<NodeJS.Timeout | undefined>(undefined);\n const waitDismissPromise = useRef<(() => void) | undefined>(undefined);\n const waitDismiss = useCallback((resolver: () => void) => {\n waitDismissPromise.current = resolver;\n waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);\n }, []);\n const completeDismiss = useCallback(() => {\n if (waitDismissTimeout.current) clearTimeout(waitDismissTimeout.current);\n if (waitDismissPromise.current) waitDismissPromise.current();\n waitDismissTimeout.current = undefined;\n waitDismissPromise.current = undefined;\n }, []);\n\n const render = useForceUpdate();\n const dialogQueue = useRef<DialogJob[]>([]);\n const workingDialogJob = useRef<DialogJob | undefined>(undefined);\n const visibleState = useRef(false);\n\n const isProcessing = () => Boolean(workingDialogJob.current);\n const updateToShow = useCallback(() => {\n visibleState.current = true;\n render();\n }, []);\n const updateToHide = useCallback((): Promise<void> => {\n return new Promise((resolve) => {\n visibleState.current = false;\n render();\n waitDismiss(resolve);\n });\n }, []);\n const consumeQueue = useCallback(() => {\n completeDismiss();\n const job = dialogQueue.current.shift();\n if (job) {\n workingDialogJob.current = job;\n updateToShow();\n } else {\n workingDialogJob.current = undefined;\n }\n }, []);\n\n const createJob =\n <T extends DialogJob['type']>(type: T) =>\n (props: DialogPropsBy<T>) => {\n const jobItem = { type, props } as DialogJob;\n if (isProcessing()) dialogQueue.current.push(jobItem);\n else {\n workingDialogJob.current = jobItem;\n updateToShow();\n }\n };\n\n const alert = useCallback(createJob('Alert'), []);\n const openMenu = useCallback(createJob('ActionMenu'), []);\n const openPrompt = useCallback(createJob('Prompt'), []);\n const openSheet = useCallback(createJob('BottomSheet'), []);\n\n return (\n <AlertContext.Provider value={{ alert }}>\n <ActionMenuContext.Provider value={{ openMenu }}>\n <PromptContext.Provider value={{ openPrompt }}>\n <BottomSheetContext.Provider value={{ openSheet }}>\n {children}\n {workingDialogJob.current?.type === 'ActionMenu' && (\n <ActionMenu\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n menuItems={workingDialogJob.current.props.menuItems}\n />\n )}\n {workingDialogJob.current?.type === 'Alert' && (\n <Alert\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n message={workingDialogJob.current.props.message}\n buttons={workingDialogJob.current.props.buttons ?? [{ text: defaultLabels?.alert?.ok || 'OK' }]}\n />\n )}\n {workingDialogJob.current?.type === 'Prompt' && (\n <Prompt\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n onSubmit={workingDialogJob.current.props.onSubmit}\n defaultValue={workingDialogJob.current.props.defaultValue}\n submitLabel={workingDialogJob.current.props.submitLabel ?? defaultLabels?.prompt?.ok}\n cancelLabel={workingDialogJob.current.props.cancelLabel ?? defaultLabels?.prompt?.cancel}\n placeholder={workingDialogJob.current.props.placeholder ?? defaultLabels?.prompt?.placeholder}\n />\n )}\n {workingDialogJob.current?.type === 'BottomSheet' && (\n <BottomSheet\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n sheetItems={workingDialogJob.current.props.sheetItems}\n HeaderComponent={workingDialogJob.current.props.HeaderComponent}\n />\n )}\n </BottomSheetContext.Provider>\n </PromptContext.Provider>\n </ActionMenuContext.Provider>\n </AlertContext.Provider>\n );\n};\n\nexport const useActionMenu = () => {\n const context = useContext(ActionMenuContext);\n if (!context) throw new Error('ActionMenuContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useAlert = () => {\n const context = useContext(AlertContext);\n if (!context) throw new Error('AlertContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const usePrompt = () => {\n const context = useContext(PromptContext);\n if (!context) throw new Error('PromptContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useBottomSheet = () => {\n const context = useContext(BottomSheetContext);\n if (!context) throw new Error('BottomSheetContext is not provided, wrap your app with DialogProvider');\n return context;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,7 +11,7 @@ const useRetry = (hasError, retryCount = 5) => {
|
|
|
11
11
|
if (Platform.OS === 'android') return '';
|
|
12
12
|
const forceUpdate = useForceUpdate();
|
|
13
13
|
const retryCountRef = useRef(1);
|
|
14
|
-
const retryTimeoutRef = useRef();
|
|
14
|
+
const retryTimeoutRef = useRef(undefined);
|
|
15
15
|
useEffect(() => {
|
|
16
16
|
if (hasError) {
|
|
17
17
|
const reloadReservation = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useRef","useState","Platform","StyleSheet","useForceUpdate","createStyleSheet","useUIKitTheme","Box","Icon","Image","useRetry","hasError","retryCount","OS","forceUpdate","retryCountRef","retryTimeoutRef","reloadReservation","current","setTimeout","clearTimeout","ImageWithPlaceholder","props","palette","select","colors","imageNotFound","setImageNotFound","key","createElement","style","overflow","width","height","backgroundColor","dark","background400","light","background100","source","absoluteFill","styles","hide","resizeMode","resizeMethod","onError","onLoad","containerStyle","icon","size","color","onBackground02","display"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Platform, StyleProp, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport createStyleSheet from '../../styles/createStyleSheet';\nimport useUIKitTheme from '../../theme/useUIKitTheme';\nimport Box from '../Box';\nimport Icon from '../Icon';\nimport Image from '../Image';\n\nconst useRetry = (hasError: boolean, retryCount = 5) => {\n // NOTE: Glide(fast-image) will retry automatically on Android\n if (Platform.OS === 'android') return '';\n\n const forceUpdate = useForceUpdate();\n const retryCountRef = useRef(1);\n const retryTimeoutRef = useRef<NodeJS.Timeout>();\n\n useEffect(() => {\n if (hasError) {\n const reloadReservation = () => {\n if (retryCountRef.current < retryCount) {\n retryTimeoutRef.current = setTimeout(() => {\n retryCountRef.current++;\n reloadReservation();\n forceUpdate();\n }, retryCountRef.current * 5000);\n }\n };\n\n return reloadReservation();\n } else {\n return clearTimeout(retryTimeoutRef.current);\n }\n }, [hasError]);\n\n return retryCountRef.current;\n};\n\ntype Props = {\n source: number | { uri: string };\n width?: number | `${number}%`;\n height?: number | `${number}%`;\n style?: StyleProp<ViewStyle>;\n};\nconst ImageWithPlaceholder = (props: Props) => {\n const { palette, select, colors } = useUIKitTheme();\n const [imageNotFound, setImageNotFound] = useState(false);\n\n const key = useRetry(imageNotFound);\n return (\n <Box\n style={[{ overflow: 'hidden', width: props.width, height: props.height }, props.style]}\n backgroundColor={select({ dark: palette.background400, light: palette.background100 })}\n >\n <Image\n key={key}\n source={props.source}\n style={[StyleSheet.absoluteFill, imageNotFound && styles.hide]}\n resizeMode={'cover'}\n resizeMethod={'resize'}\n onError={() => setImageNotFound(true)}\n onLoad={() => setImageNotFound(false)}\n />\n {imageNotFound && (\n <Icon\n containerStyle={StyleSheet.absoluteFill}\n icon={'thumbnail-none'}\n size={48}\n color={colors.onBackground02}\n />\n )}\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n hide: {\n display: 'none',\n },\n});\n\nexport default ImageWithPlaceholder;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAC1D,SAASC,QAAQ,EAAaC,UAAU,QAAmB,cAAc;AAEzE,SAASC,cAAc,QAAQ,uBAAuB;AAEtD,OAAOC,gBAAgB,MAAM,+BAA+B;AAC5D,OAAOC,aAAa,MAAM,2BAA2B;AACrD,OAAOC,GAAG,MAAM,QAAQ;AACxB,OAAOC,IAAI,MAAM,SAAS;AAC1B,OAAOC,KAAK,MAAM,UAAU;AAE5B,MAAMC,QAAQ,GAAGA,CAACC,QAAiB,EAAEC,UAAU,GAAG,CAAC,KAAK;EACtD;EACA,IAAIV,QAAQ,CAACW,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE;EAExC,MAAMC,WAAW,GAAGV,cAAc,CAAC,CAAC;EACpC,MAAMW,aAAa,GAAGf,MAAM,CAAC,CAAC,CAAC;EAC/B,MAAMgB,eAAe,GAAGhB,MAAM,
|
|
1
|
+
{"version":3,"names":["React","useEffect","useRef","useState","Platform","StyleSheet","useForceUpdate","createStyleSheet","useUIKitTheme","Box","Icon","Image","useRetry","hasError","retryCount","OS","forceUpdate","retryCountRef","retryTimeoutRef","undefined","reloadReservation","current","setTimeout","clearTimeout","ImageWithPlaceholder","props","palette","select","colors","imageNotFound","setImageNotFound","key","createElement","style","overflow","width","height","backgroundColor","dark","background400","light","background100","source","absoluteFill","styles","hide","resizeMode","resizeMethod","onError","onLoad","containerStyle","icon","size","color","onBackground02","display"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Platform, StyleProp, StyleSheet, ViewStyle } from 'react-native';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport createStyleSheet from '../../styles/createStyleSheet';\nimport useUIKitTheme from '../../theme/useUIKitTheme';\nimport Box from '../Box';\nimport Icon from '../Icon';\nimport Image from '../Image';\n\nconst useRetry = (hasError: boolean, retryCount = 5) => {\n // NOTE: Glide(fast-image) will retry automatically on Android\n if (Platform.OS === 'android') return '';\n\n const forceUpdate = useForceUpdate();\n const retryCountRef = useRef(1);\n const retryTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n useEffect(() => {\n if (hasError) {\n const reloadReservation = () => {\n if (retryCountRef.current < retryCount) {\n retryTimeoutRef.current = setTimeout(() => {\n retryCountRef.current++;\n reloadReservation();\n forceUpdate();\n }, retryCountRef.current * 5000);\n }\n };\n\n return reloadReservation();\n } else {\n return clearTimeout(retryTimeoutRef.current);\n }\n }, [hasError]);\n\n return retryCountRef.current;\n};\n\ntype Props = {\n source: number | { uri: string };\n width?: number | `${number}%`;\n height?: number | `${number}%`;\n style?: StyleProp<ViewStyle>;\n};\nconst ImageWithPlaceholder = (props: Props) => {\n const { palette, select, colors } = useUIKitTheme();\n const [imageNotFound, setImageNotFound] = useState(false);\n\n const key = useRetry(imageNotFound);\n return (\n <Box\n style={[{ overflow: 'hidden', width: props.width, height: props.height }, props.style]}\n backgroundColor={select({ dark: palette.background400, light: palette.background100 })}\n >\n <Image\n key={key}\n source={props.source}\n style={[StyleSheet.absoluteFill, imageNotFound && styles.hide]}\n resizeMode={'cover'}\n resizeMethod={'resize'}\n onError={() => setImageNotFound(true)}\n onLoad={() => setImageNotFound(false)}\n />\n {imageNotFound && (\n <Icon\n containerStyle={StyleSheet.absoluteFill}\n icon={'thumbnail-none'}\n size={48}\n color={colors.onBackground02}\n />\n )}\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n hide: {\n display: 'none',\n },\n});\n\nexport default ImageWithPlaceholder;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,10 +23,12 @@ const AvatarGroup = ({
|
|
|
23
23
|
return ((_React$Children$map = React.Children.map(children, (child, index) => {
|
|
24
24
|
if (index + 1 > MAX) return child;
|
|
25
25
|
if (! /*#__PURE__*/React.isValidElement(child)) return child;
|
|
26
|
-
if (childAmount === 1)
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
if (childAmount === 1) {
|
|
27
|
+
return /*#__PURE__*/React.cloneElement(child, {
|
|
28
|
+
size,
|
|
29
|
+
containerStyle
|
|
30
|
+
});
|
|
31
|
+
}
|
|
30
32
|
const top = getTopPoint(index, childAmount) * size;
|
|
31
33
|
const start = getStartPoint(index) * size;
|
|
32
34
|
const width = getWidthPoint(index, childAmount) * size;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","MAX","AvatarGroup","children","containerStyle","size","childAmount","Children","count","createElement","style","overflow","width","height","borderRadius","backgroundColor","renderAvatars","_React$Children$map","map","child","index","isValidElement","cloneElement","top","getTopPoint","start","getStartPoint","getWidthPoint","getHeightPoint","innerStart","getInnerStart","innerTop","getInnerTop","position","square","slice","_","total","idx"],"sources":["AvatarGroup.tsx"],"sourcesContent":["import React
|
|
1
|
+
{"version":3,"names":["React","View","MAX","AvatarGroup","children","containerStyle","size","childAmount","Children","count","createElement","style","overflow","width","height","borderRadius","backgroundColor","renderAvatars","_React$Children$map","map","child","index","isValidElement","cloneElement","top","getTopPoint","start","getStartPoint","getWidthPoint","getHeightPoint","innerStart","getInnerStart","innerTop","getInnerTop","position","square","slice","_","total","idx"],"sources":["AvatarGroup.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleProp, View, ViewStyle } from 'react-native';\n\nconst MAX = 4;\n\ntype AvatarChildProps = {\n size?: number;\n square?: boolean;\n containerStyle?: StyleProp<ViewStyle>;\n};\n\ntype Props = React.PropsWithChildren<{\n size?: number;\n containerStyle?: StyleProp<ViewStyle>;\n}>;\nconst AvatarGroup = ({ children, containerStyle, size = 56 }: Props) => {\n const childAmount = React.Children.count(children);\n\n if (childAmount === 0) {\n return (\n <View\n style={[\n containerStyle,\n {\n overflow: 'hidden',\n width: size,\n height: size,\n borderRadius: size,\n backgroundColor: 'rgba(120,120,120,0.2)',\n },\n ]}\n />\n );\n }\n\n const renderAvatars = () => {\n return (\n React.Children.map(children, (child, index) => {\n if (index + 1 > MAX) return child;\n if (!React.isValidElement(child)) return child;\n\n if (childAmount === 1) {\n return React.cloneElement(child as React.ReactElement<AvatarChildProps>, { size, containerStyle });\n }\n\n const top = getTopPoint(index, childAmount) * size;\n const start = getStartPoint(index) * size;\n const width = getWidthPoint(index, childAmount) * size;\n const height = getHeightPoint(index, childAmount) * size;\n const innerStart = -getInnerStart(index, childAmount) * size;\n const innerTop = -getInnerTop(childAmount) * size;\n\n return (\n <View style={{ overflow: 'hidden', position: 'absolute', top, start, width, height }}>\n {React.cloneElement(child as React.ReactElement<AvatarChildProps>, {\n size,\n square: true,\n containerStyle: { start: innerStart, top: innerTop },\n })}\n </View>\n );\n })?.slice(0, 4) ?? []\n );\n };\n\n return (\n <View style={[containerStyle, { overflow: 'hidden', width: size, height: size, borderRadius: size }]}>\n {renderAvatars()}\n </View>\n );\n};\n\nconst getHeightPoint = (_: number, total: number) => {\n if (total === 2) return 1;\n return 0.5;\n};\nconst getWidthPoint = (idx: number, total: number) => {\n if (total === 3 && idx === 0) return 1;\n return 0.5;\n};\nconst getTopPoint = (idx: number, total: number) => {\n if (total === 2) return 0;\n if (total === 3 && idx === 0) return -0.025;\n if (total === 3 && idx !== 0) return 0.525;\n if (idx === 0 || idx === 1) return -0.025;\n return 0.525;\n};\nconst getStartPoint = (idx: number) => {\n if (idx === 0 || idx === 2) return -0.025;\n return 0.525;\n};\nconst getInnerStart = (idx: number, total: number) => {\n if (total === 3 && idx === 0) return 0;\n return 0.25;\n};\nconst getInnerTop = (total: number) => {\n if (total === 2) return 0;\n return 0.25;\n};\n\nexport default AvatarGroup;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","Text","useUIKitTheme","DEFAULT_MAX","DEFAULT_BORDER_WIDTH","DEFAULT_AVATAR_GAP","DEFAULT_AVATAR_SIZE","DEFAULT_REMAINS_MAX","AvatarStack","children","containerStyle","styles","maxAvatar","size","avatarGap","colors","palette","select","defaultStyles","borderWidth","borderColor","background","remainsTextColor","onBackground02","remainsBackgroundColor","light","background100","dark","background600","avatarStyles","childrenArray","Children","toArray","filter","it","isValidElement","remains","length","shouldRenderRemains","actualSize","actualGap","renderAvatars","slice","map","child","index","cloneElement","start","renderRemainsCount","createElement","style","width","height","borderRadius","alignItems","justifyContent","backgroundColor","color","fontSize","caption4","Math","min","calculateWidth","widthEach","avatarCountOffset","avatarCount","count","flexDirection"],"sources":["AvatarStack.tsx"],"sourcesContent":["import React
|
|
1
|
+
{"version":3,"names":["React","View","Text","useUIKitTheme","DEFAULT_MAX","DEFAULT_BORDER_WIDTH","DEFAULT_AVATAR_GAP","DEFAULT_AVATAR_SIZE","DEFAULT_REMAINS_MAX","AvatarStack","children","containerStyle","styles","maxAvatar","size","avatarGap","colors","palette","select","defaultStyles","borderWidth","borderColor","background","remainsTextColor","onBackground02","remainsBackgroundColor","light","background100","dark","background600","avatarStyles","childrenArray","Children","toArray","filter","it","isValidElement","remains","length","shouldRenderRemains","actualSize","actualGap","renderAvatars","slice","map","child","index","cloneElement","start","renderRemainsCount","createElement","style","width","height","borderRadius","alignItems","justifyContent","backgroundColor","color","fontSize","caption4","Math","min","calculateWidth","widthEach","avatarCountOffset","avatarCount","count","flexDirection"],"sources":["AvatarStack.tsx"],"sourcesContent":["import React from 'react';\nimport { StyleProp, View, ViewStyle } from 'react-native';\n\nimport Text from '../../components/Text';\nimport useUIKitTheme from '../../theme/useUIKitTheme';\n\ntype AvatarChildProps = {\n size?: number;\n containerStyle?: StyleProp<ViewStyle>;\n};\n\nconst DEFAULT_MAX = 3;\nconst DEFAULT_BORDER_WIDTH = 2;\nconst DEFAULT_AVATAR_GAP = -4;\nconst DEFAULT_AVATAR_SIZE = 26;\nconst DEFAULT_REMAINS_MAX = 99;\n\ntype Props = React.PropsWithChildren<{\n size?: number;\n containerStyle?: StyleProp<ViewStyle>;\n maxAvatar?: number;\n avatarGap?: number;\n styles?: {\n borderWidth?: number;\n borderColor?: string;\n remainsTextColor?: string;\n remainsBackgroundColor?: string;\n };\n}>;\n\nconst AvatarStack = ({\n children,\n containerStyle,\n styles,\n maxAvatar = DEFAULT_MAX,\n size = DEFAULT_AVATAR_SIZE,\n avatarGap = DEFAULT_AVATAR_GAP,\n}: Props) => {\n const { colors, palette, select } = useUIKitTheme();\n const defaultStyles = {\n borderWidth: DEFAULT_BORDER_WIDTH,\n borderColor: colors.background,\n remainsTextColor: colors.onBackground02,\n remainsBackgroundColor: select({ light: palette.background100, dark: palette.background600 }),\n };\n const avatarStyles = { ...defaultStyles, ...styles };\n\n const childrenArray = React.Children.toArray(children).filter((it) => React.isValidElement(it));\n const remains = childrenArray.length - maxAvatar;\n const shouldRenderRemains = remains > 0;\n\n const actualSize = size + avatarStyles.borderWidth * 2;\n const actualGap = avatarGap - avatarStyles.borderWidth;\n\n const renderAvatars = () => {\n return childrenArray.slice(0, maxAvatar).map((child, index) =>\n React.cloneElement(child as React.ReactElement<AvatarChildProps>, {\n size: actualSize,\n containerStyle: {\n start: actualGap * index,\n borderWidth: avatarStyles.borderWidth,\n borderColor: avatarStyles.borderColor,\n },\n }),\n );\n };\n\n const renderRemainsCount = () => {\n if (!shouldRenderRemains) return null;\n return (\n <View\n style={[\n avatarStyles,\n {\n start: actualGap * maxAvatar,\n width: actualSize,\n height: actualSize,\n borderRadius: actualSize / 2,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: avatarStyles.remainsBackgroundColor,\n },\n ]}\n >\n <Text style={{ color: avatarStyles.remainsTextColor, fontSize: 8 }} caption4>\n {`+${Math.min(remains, DEFAULT_REMAINS_MAX)}`}\n </Text>\n </View>\n );\n };\n\n const calculateWidth = () => {\n const widthEach = actualSize + actualGap;\n const avatarCountOffset = shouldRenderRemains ? 1 : 0;\n const avatarCount = shouldRenderRemains ? maxAvatar : childrenArray.length;\n const count = avatarCount + avatarCountOffset;\n return widthEach * count + avatarStyles.borderWidth;\n };\n\n return (\n <View style={[containerStyle, { start: -avatarStyles.borderWidth, flexDirection: 'row', width: calculateWidth() }]}>\n {renderAvatars()}\n {renderRemainsCount()}\n </View>\n );\n};\n\nexport default AvatarStack;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,8 +14,8 @@ export const DialogProvider = ({
|
|
|
14
14
|
children
|
|
15
15
|
}) => {
|
|
16
16
|
var _workingDialogJob$cur, _workingDialogJob$cur2, _defaultLabels$alert, _workingDialogJob$cur3, _defaultLabels$prompt, _defaultLabels$prompt2, _defaultLabels$prompt3, _workingDialogJob$cur4;
|
|
17
|
-
const waitDismissTimeout = useRef();
|
|
18
|
-
const waitDismissPromise = useRef();
|
|
17
|
+
const waitDismissTimeout = useRef(undefined);
|
|
18
|
+
const waitDismissPromise = useRef(undefined);
|
|
19
19
|
const waitDismiss = useCallback(resolver => {
|
|
20
20
|
waitDismissPromise.current = resolver;
|
|
21
21
|
waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);
|
|
@@ -28,7 +28,7 @@ export const DialogProvider = ({
|
|
|
28
28
|
}, []);
|
|
29
29
|
const render = useForceUpdate();
|
|
30
30
|
const dialogQueue = useRef([]);
|
|
31
|
-
const workingDialogJob = useRef();
|
|
31
|
+
const workingDialogJob = useRef(undefined);
|
|
32
32
|
const visibleState = useRef(false);
|
|
33
33
|
const isProcessing = () => Boolean(workingDialogJob.current);
|
|
34
34
|
const updateToShow = useCallback(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useContext","useRef","useForceUpdate","ActionMenu","Alert","BottomSheet","Prompt","AlertContext","createContext","ActionMenuContext","PromptContext","BottomSheetContext","DISMISS_TIMEOUT","DialogProvider","defaultLabels","children","_workingDialogJob$cur","_workingDialogJob$cur2","_defaultLabels$alert","_workingDialogJob$cur3","_defaultLabels$prompt","_defaultLabels$prompt2","_defaultLabels$prompt3","_workingDialogJob$cur4","waitDismissTimeout","waitDismissPromise","waitDismiss","resolver","current","setTimeout","completeDismiss","clearTimeout","undefined","render","dialogQueue","workingDialogJob","visibleState","isProcessing","Boolean","updateToShow","updateToHide","Promise","resolve","consumeQueue","job","shift","createJob","type","props","jobItem","push","alert","openMenu","openPrompt","openSheet","createElement","Provider","value","onHide","onDismiss","visible","title","menuItems","message","buttons","text","ok","onSubmit","defaultValue","submitLabel","prompt","cancelLabel","cancel","placeholder","sheetItems","HeaderComponent","useActionMenu","context","Error","useAlert","usePrompt","useBottomSheet"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { ActionMenuItem } from '../ActionMenu';\nimport ActionMenu from '../ActionMenu';\nimport type { AlertItem } from '../Alert';\nimport Alert from '../Alert';\nimport type { BottomSheetItem } from '../BottomSheet';\nimport BottomSheet from '../BottomSheet';\nimport type { PromptItem } from '../Prompt';\nimport Prompt from '../Prompt';\n\ntype DialogJob =\n | {\n type: 'ActionMenu';\n props: ActionMenuItem;\n }\n | {\n type: 'Alert';\n props: AlertItem;\n }\n | {\n type: 'Prompt';\n props: PromptItem;\n }\n | {\n type: 'BottomSheet';\n props: BottomSheetItem;\n };\n\ntype DialogPropsBy<T extends DialogJob['type'], U extends DialogJob = DialogJob> = U extends { type: T; props: infer P }\n ? P\n : never;\n\ntype DialogContextType = {\n openMenu: (props: DialogPropsBy<'ActionMenu'>) => void;\n alert: (props: DialogPropsBy<'Alert'>) => void;\n openPrompt: (props: DialogPropsBy<'Prompt'>) => void;\n openSheet: (props: DialogPropsBy<'BottomSheet'>) => void;\n};\n\nconst AlertContext = React.createContext<Pick<DialogContextType, 'alert'> | null>(null);\nconst ActionMenuContext = React.createContext<Pick<DialogContextType, 'openMenu'> | null>(null);\nconst PromptContext = React.createContext<Pick<DialogContextType, 'openPrompt'> | null>(null);\nconst BottomSheetContext = React.createContext<Pick<DialogContextType, 'openSheet'> | null>(null);\n\ntype Props = React.PropsWithChildren<{\n defaultLabels?: {\n alert?: { ok?: string };\n prompt?: { placeholder?: string; ok?: string; cancel?: string };\n };\n}>;\nconst DISMISS_TIMEOUT = 3000;\nexport const DialogProvider = ({ defaultLabels, children }: Props) => {\n const waitDismissTimeout = useRef<NodeJS.Timeout>();\n const waitDismissPromise = useRef<() => void>();\n const waitDismiss = useCallback((resolver: () => void) => {\n waitDismissPromise.current = resolver;\n waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);\n }, []);\n const completeDismiss = useCallback(() => {\n if (waitDismissTimeout.current) clearTimeout(waitDismissTimeout.current);\n if (waitDismissPromise.current) waitDismissPromise.current();\n waitDismissTimeout.current = undefined;\n waitDismissPromise.current = undefined;\n }, []);\n\n const render = useForceUpdate();\n const dialogQueue = useRef<DialogJob[]>([]);\n const workingDialogJob = useRef<DialogJob>();\n const visibleState = useRef(false);\n\n const isProcessing = () => Boolean(workingDialogJob.current);\n const updateToShow = useCallback(() => {\n visibleState.current = true;\n render();\n }, []);\n const updateToHide = useCallback((): Promise<void> => {\n return new Promise((resolve) => {\n visibleState.current = false;\n render();\n waitDismiss(resolve);\n });\n }, []);\n const consumeQueue = useCallback(() => {\n completeDismiss();\n const job = dialogQueue.current.shift();\n if (job) {\n workingDialogJob.current = job;\n updateToShow();\n } else {\n workingDialogJob.current = undefined;\n }\n }, []);\n\n const createJob =\n <T extends DialogJob['type']>(type: T) =>\n (props: DialogPropsBy<T>) => {\n const jobItem = { type, props } as DialogJob;\n if (isProcessing()) dialogQueue.current.push(jobItem);\n else {\n workingDialogJob.current = jobItem;\n updateToShow();\n }\n };\n\n const alert = useCallback(createJob('Alert'), []);\n const openMenu = useCallback(createJob('ActionMenu'), []);\n const openPrompt = useCallback(createJob('Prompt'), []);\n const openSheet = useCallback(createJob('BottomSheet'), []);\n\n return (\n <AlertContext.Provider value={{ alert }}>\n <ActionMenuContext.Provider value={{ openMenu }}>\n <PromptContext.Provider value={{ openPrompt }}>\n <BottomSheetContext.Provider value={{ openSheet }}>\n {children}\n {workingDialogJob.current?.type === 'ActionMenu' && (\n <ActionMenu\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n menuItems={workingDialogJob.current.props.menuItems}\n />\n )}\n {workingDialogJob.current?.type === 'Alert' && (\n <Alert\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n message={workingDialogJob.current.props.message}\n buttons={workingDialogJob.current.props.buttons ?? [{ text: defaultLabels?.alert?.ok || 'OK' }]}\n />\n )}\n {workingDialogJob.current?.type === 'Prompt' && (\n <Prompt\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n onSubmit={workingDialogJob.current.props.onSubmit}\n defaultValue={workingDialogJob.current.props.defaultValue}\n submitLabel={workingDialogJob.current.props.submitLabel ?? defaultLabels?.prompt?.ok}\n cancelLabel={workingDialogJob.current.props.cancelLabel ?? defaultLabels?.prompt?.cancel}\n placeholder={workingDialogJob.current.props.placeholder ?? defaultLabels?.prompt?.placeholder}\n />\n )}\n {workingDialogJob.current?.type === 'BottomSheet' && (\n <BottomSheet\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n sheetItems={workingDialogJob.current.props.sheetItems}\n HeaderComponent={workingDialogJob.current.props.HeaderComponent}\n />\n )}\n </BottomSheetContext.Provider>\n </PromptContext.Provider>\n </ActionMenuContext.Provider>\n </AlertContext.Provider>\n );\n};\n\nexport const useActionMenu = () => {\n const context = useContext(ActionMenuContext);\n if (!context) throw new Error('ActionMenuContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useAlert = () => {\n const context = useContext(AlertContext);\n if (!context) throw new Error('AlertContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const usePrompt = () => {\n const context = useContext(PromptContext);\n if (!context) throw new Error('PromptContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useBottomSheet = () => {\n const context = useContext(BottomSheetContext);\n if (!context) throw new Error('BottomSheetContext is not provided, wrap your app with DialogProvider');\n return context;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useContext","useRef","useForceUpdate","ActionMenu","Alert","BottomSheet","Prompt","AlertContext","createContext","ActionMenuContext","PromptContext","BottomSheetContext","DISMISS_TIMEOUT","DialogProvider","defaultLabels","children","_workingDialogJob$cur","_workingDialogJob$cur2","_defaultLabels$alert","_workingDialogJob$cur3","_defaultLabels$prompt","_defaultLabels$prompt2","_defaultLabels$prompt3","_workingDialogJob$cur4","waitDismissTimeout","undefined","waitDismissPromise","waitDismiss","resolver","current","setTimeout","completeDismiss","clearTimeout","render","dialogQueue","workingDialogJob","visibleState","isProcessing","Boolean","updateToShow","updateToHide","Promise","resolve","consumeQueue","job","shift","createJob","type","props","jobItem","push","alert","openMenu","openPrompt","openSheet","createElement","Provider","value","onHide","onDismiss","visible","title","menuItems","message","buttons","text","ok","onSubmit","defaultValue","submitLabel","prompt","cancelLabel","cancel","placeholder","sheetItems","HeaderComponent","useActionMenu","context","Error","useAlert","usePrompt","useBottomSheet"],"sources":["index.tsx"],"sourcesContent":["import React, { useCallback, useContext, useRef } from 'react';\n\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { ActionMenuItem } from '../ActionMenu';\nimport ActionMenu from '../ActionMenu';\nimport type { AlertItem } from '../Alert';\nimport Alert from '../Alert';\nimport type { BottomSheetItem } from '../BottomSheet';\nimport BottomSheet from '../BottomSheet';\nimport type { PromptItem } from '../Prompt';\nimport Prompt from '../Prompt';\n\ntype DialogJob =\n | {\n type: 'ActionMenu';\n props: ActionMenuItem;\n }\n | {\n type: 'Alert';\n props: AlertItem;\n }\n | {\n type: 'Prompt';\n props: PromptItem;\n }\n | {\n type: 'BottomSheet';\n props: BottomSheetItem;\n };\n\ntype DialogPropsBy<T extends DialogJob['type'], U extends DialogJob = DialogJob> = U extends { type: T; props: infer P }\n ? P\n : never;\n\ntype DialogContextType = {\n openMenu: (props: DialogPropsBy<'ActionMenu'>) => void;\n alert: (props: DialogPropsBy<'Alert'>) => void;\n openPrompt: (props: DialogPropsBy<'Prompt'>) => void;\n openSheet: (props: DialogPropsBy<'BottomSheet'>) => void;\n};\n\nconst AlertContext = React.createContext<Pick<DialogContextType, 'alert'> | null>(null);\nconst ActionMenuContext = React.createContext<Pick<DialogContextType, 'openMenu'> | null>(null);\nconst PromptContext = React.createContext<Pick<DialogContextType, 'openPrompt'> | null>(null);\nconst BottomSheetContext = React.createContext<Pick<DialogContextType, 'openSheet'> | null>(null);\n\ntype Props = React.PropsWithChildren<{\n defaultLabels?: {\n alert?: { ok?: string };\n prompt?: { placeholder?: string; ok?: string; cancel?: string };\n };\n}>;\nconst DISMISS_TIMEOUT = 3000;\nexport const DialogProvider = ({ defaultLabels, children }: Props) => {\n const waitDismissTimeout = useRef<NodeJS.Timeout | undefined>(undefined);\n const waitDismissPromise = useRef<(() => void) | undefined>(undefined);\n const waitDismiss = useCallback((resolver: () => void) => {\n waitDismissPromise.current = resolver;\n waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);\n }, []);\n const completeDismiss = useCallback(() => {\n if (waitDismissTimeout.current) clearTimeout(waitDismissTimeout.current);\n if (waitDismissPromise.current) waitDismissPromise.current();\n waitDismissTimeout.current = undefined;\n waitDismissPromise.current = undefined;\n }, []);\n\n const render = useForceUpdate();\n const dialogQueue = useRef<DialogJob[]>([]);\n const workingDialogJob = useRef<DialogJob | undefined>(undefined);\n const visibleState = useRef(false);\n\n const isProcessing = () => Boolean(workingDialogJob.current);\n const updateToShow = useCallback(() => {\n visibleState.current = true;\n render();\n }, []);\n const updateToHide = useCallback((): Promise<void> => {\n return new Promise((resolve) => {\n visibleState.current = false;\n render();\n waitDismiss(resolve);\n });\n }, []);\n const consumeQueue = useCallback(() => {\n completeDismiss();\n const job = dialogQueue.current.shift();\n if (job) {\n workingDialogJob.current = job;\n updateToShow();\n } else {\n workingDialogJob.current = undefined;\n }\n }, []);\n\n const createJob =\n <T extends DialogJob['type']>(type: T) =>\n (props: DialogPropsBy<T>) => {\n const jobItem = { type, props } as DialogJob;\n if (isProcessing()) dialogQueue.current.push(jobItem);\n else {\n workingDialogJob.current = jobItem;\n updateToShow();\n }\n };\n\n const alert = useCallback(createJob('Alert'), []);\n const openMenu = useCallback(createJob('ActionMenu'), []);\n const openPrompt = useCallback(createJob('Prompt'), []);\n const openSheet = useCallback(createJob('BottomSheet'), []);\n\n return (\n <AlertContext.Provider value={{ alert }}>\n <ActionMenuContext.Provider value={{ openMenu }}>\n <PromptContext.Provider value={{ openPrompt }}>\n <BottomSheetContext.Provider value={{ openSheet }}>\n {children}\n {workingDialogJob.current?.type === 'ActionMenu' && (\n <ActionMenu\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n menuItems={workingDialogJob.current.props.menuItems}\n />\n )}\n {workingDialogJob.current?.type === 'Alert' && (\n <Alert\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n message={workingDialogJob.current.props.message}\n buttons={workingDialogJob.current.props.buttons ?? [{ text: defaultLabels?.alert?.ok || 'OK' }]}\n />\n )}\n {workingDialogJob.current?.type === 'Prompt' && (\n <Prompt\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n title={workingDialogJob.current.props.title}\n onSubmit={workingDialogJob.current.props.onSubmit}\n defaultValue={workingDialogJob.current.props.defaultValue}\n submitLabel={workingDialogJob.current.props.submitLabel ?? defaultLabels?.prompt?.ok}\n cancelLabel={workingDialogJob.current.props.cancelLabel ?? defaultLabels?.prompt?.cancel}\n placeholder={workingDialogJob.current.props.placeholder ?? defaultLabels?.prompt?.placeholder}\n />\n )}\n {workingDialogJob.current?.type === 'BottomSheet' && (\n <BottomSheet\n onHide={updateToHide}\n onDismiss={consumeQueue}\n visible={visibleState.current}\n sheetItems={workingDialogJob.current.props.sheetItems}\n HeaderComponent={workingDialogJob.current.props.HeaderComponent}\n />\n )}\n </BottomSheetContext.Provider>\n </PromptContext.Provider>\n </ActionMenuContext.Provider>\n </AlertContext.Provider>\n );\n};\n\nexport const useActionMenu = () => {\n const context = useContext(ActionMenuContext);\n if (!context) throw new Error('ActionMenuContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useAlert = () => {\n const context = useContext(AlertContext);\n if (!context) throw new Error('AlertContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const usePrompt = () => {\n const context = useContext(PromptContext);\n if (!context) throw new Error('PromptContext is not provided, wrap your app with DialogProvider');\n return context;\n};\nexport const useBottomSheet = () => {\n const context = useContext(BottomSheetContext);\n if (!context) throw new Error('BottomSheetContext is not provided, wrap your app with DialogProvider');\n return context;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sendbird/uikit-react-native-foundation",
|
|
3
|
-
"version": "3.12.
|
|
3
|
+
"version": "3.12.2",
|
|
4
4
|
"description": "A foundational UI kit for building chat-enabled React Native apps.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sendbird",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"access": "public"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@sendbird/uikit-utils": "3.12.
|
|
60
|
+
"@sendbird/uikit-utils": "3.12.2"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/react": "*",
|
|
@@ -94,5 +94,5 @@
|
|
|
94
94
|
]
|
|
95
95
|
]
|
|
96
96
|
},
|
|
97
|
-
"gitHead": "
|
|
97
|
+
"gitHead": "bea2acef581a062a275f1b8463ebe643bc4276e6"
|
|
98
98
|
}
|
|
@@ -15,7 +15,7 @@ const useRetry = (hasError: boolean, retryCount = 5) => {
|
|
|
15
15
|
|
|
16
16
|
const forceUpdate = useForceUpdate();
|
|
17
17
|
const retryCountRef = useRef(1);
|
|
18
|
-
const retryTimeoutRef = useRef<NodeJS.Timeout>();
|
|
18
|
+
const retryTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);
|
|
19
19
|
|
|
20
20
|
useEffect(() => {
|
|
21
21
|
if (hasError) {
|
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { StyleProp, View, ViewStyle } from 'react-native';
|
|
3
3
|
|
|
4
4
|
const MAX = 4;
|
|
5
5
|
|
|
6
|
+
type AvatarChildProps = {
|
|
7
|
+
size?: number;
|
|
8
|
+
square?: boolean;
|
|
9
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
10
|
+
};
|
|
11
|
+
|
|
6
12
|
type Props = React.PropsWithChildren<{
|
|
7
13
|
size?: number;
|
|
8
14
|
containerStyle?: StyleProp<ViewStyle>;
|
|
@@ -33,7 +39,9 @@ const AvatarGroup = ({ children, containerStyle, size = 56 }: Props) => {
|
|
|
33
39
|
if (index + 1 > MAX) return child;
|
|
34
40
|
if (!React.isValidElement(child)) return child;
|
|
35
41
|
|
|
36
|
-
if (childAmount === 1)
|
|
42
|
+
if (childAmount === 1) {
|
|
43
|
+
return React.cloneElement(child as React.ReactElement<AvatarChildProps>, { size, containerStyle });
|
|
44
|
+
}
|
|
37
45
|
|
|
38
46
|
const top = getTopPoint(index, childAmount) * size;
|
|
39
47
|
const start = getStartPoint(index) * size;
|
|
@@ -44,7 +52,7 @@ const AvatarGroup = ({ children, containerStyle, size = 56 }: Props) => {
|
|
|
44
52
|
|
|
45
53
|
return (
|
|
46
54
|
<View style={{ overflow: 'hidden', position: 'absolute', top, start, width, height }}>
|
|
47
|
-
{React.cloneElement(child as ReactElement
|
|
55
|
+
{React.cloneElement(child as React.ReactElement<AvatarChildProps>, {
|
|
48
56
|
size,
|
|
49
57
|
square: true,
|
|
50
58
|
containerStyle: { start: innerStart, top: innerTop },
|
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import React
|
|
1
|
+
import React from 'react';
|
|
2
2
|
import { StyleProp, View, ViewStyle } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import Text from '../../components/Text';
|
|
5
5
|
import useUIKitTheme from '../../theme/useUIKitTheme';
|
|
6
6
|
|
|
7
|
+
type AvatarChildProps = {
|
|
8
|
+
size?: number;
|
|
9
|
+
containerStyle?: StyleProp<ViewStyle>;
|
|
10
|
+
};
|
|
11
|
+
|
|
7
12
|
const DEFAULT_MAX = 3;
|
|
8
13
|
const DEFAULT_BORDER_WIDTH = 2;
|
|
9
14
|
const DEFAULT_AVATAR_GAP = -4;
|
|
@@ -49,7 +54,7 @@ const AvatarStack = ({
|
|
|
49
54
|
|
|
50
55
|
const renderAvatars = () => {
|
|
51
56
|
return childrenArray.slice(0, maxAvatar).map((child, index) =>
|
|
52
|
-
React.cloneElement(child as ReactElement
|
|
57
|
+
React.cloneElement(child as React.ReactElement<AvatarChildProps>, {
|
|
53
58
|
size: actualSize,
|
|
54
59
|
containerStyle: {
|
|
55
60
|
start: actualGap * index,
|
package/src/ui/Dialog/index.tsx
CHANGED
|
@@ -53,8 +53,8 @@ type Props = React.PropsWithChildren<{
|
|
|
53
53
|
}>;
|
|
54
54
|
const DISMISS_TIMEOUT = 3000;
|
|
55
55
|
export const DialogProvider = ({ defaultLabels, children }: Props) => {
|
|
56
|
-
const waitDismissTimeout = useRef<NodeJS.Timeout>();
|
|
57
|
-
const waitDismissPromise = useRef<() => void>();
|
|
56
|
+
const waitDismissTimeout = useRef<NodeJS.Timeout | undefined>(undefined);
|
|
57
|
+
const waitDismissPromise = useRef<(() => void) | undefined>(undefined);
|
|
58
58
|
const waitDismiss = useCallback((resolver: () => void) => {
|
|
59
59
|
waitDismissPromise.current = resolver;
|
|
60
60
|
waitDismissTimeout.current = setTimeout(completeDismiss, DISMISS_TIMEOUT);
|
|
@@ -68,7 +68,7 @@ export const DialogProvider = ({ defaultLabels, children }: Props) => {
|
|
|
68
68
|
|
|
69
69
|
const render = useForceUpdate();
|
|
70
70
|
const dialogQueue = useRef<DialogJob[]>([]);
|
|
71
|
-
const workingDialogJob = useRef<DialogJob>();
|
|
71
|
+
const workingDialogJob = useRef<DialogJob | undefined>(undefined);
|
|
72
72
|
const visibleState = useRef(false);
|
|
73
73
|
|
|
74
74
|
const isProcessing = () => Boolean(workingDialogJob.current);
|