about summary refs log tree commit diff
path: root/src/view/shell/mobile/HistoryMenu.tsx
diff options
context:
space:
mode:
authorPaul Frazee <pfrazee@gmail.com>2022-10-10 21:13:25 -0500
committerPaul Frazee <pfrazee@gmail.com>2022-10-10 21:13:25 -0500
commitba6580101e5b8f2f994d37be14ae61fd4c3ef1ee (patch)
treeed0d720d27183cd3a679da71871dadc2894387ae /src/view/shell/mobile/HistoryMenu.tsx
parent287f2992fa6400fbac520bf7b9693bd5dcc6e7db (diff)
downloadvoidsky-ba6580101e5b8f2f994d37be14ae61fd4c3ef1ee.tar.zst
Rework footer controls
Diffstat (limited to 'src/view/shell/mobile/HistoryMenu.tsx')
-rw-r--r--src/view/shell/mobile/HistoryMenu.tsx100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/view/shell/mobile/HistoryMenu.tsx b/src/view/shell/mobile/HistoryMenu.tsx
new file mode 100644
index 000000000..d0b9b9751
--- /dev/null
+++ b/src/view/shell/mobile/HistoryMenu.tsx
@@ -0,0 +1,100 @@
+import React from 'react'
+import {
+  StyleSheet,
+  Text,
+  TouchableOpacity,
+  TouchableWithoutFeedback,
+  View,
+} from 'react-native'
+import RootSiblings from 'react-native-root-siblings'
+import {NavigationTabModel} from '../../../state/models/navigation'
+
+export function createBackMenu(tab: NavigationTabModel): RootSiblings {
+  const onPressItem = (index: number) => {
+    sibling.destroy()
+    tab.goToIndex(index)
+  }
+  const onOuterPress = () => sibling.destroy()
+  const sibling = new RootSiblings(
+    (
+      <>
+        <TouchableWithoutFeedback onPress={onOuterPress}>
+          <View style={styles.bg} />
+        </TouchableWithoutFeedback>
+        <View style={[styles.menu, styles.back]}>
+          {tab.backTen.map((item, i) => (
+            <TouchableOpacity
+              key={item.index}
+              style={[styles.menuItem, i !== 0 && styles.menuItemBorder]}
+              onPress={() => onPressItem(item.index)}>
+              <Text>{item.title || item.url}</Text>
+            </TouchableOpacity>
+          ))}
+        </View>
+      </>
+    ),
+  )
+  return sibling
+}
+
+export function createForwardMenu(tab: NavigationTabModel): RootSiblings {
+  const onPressItem = (index: number) => {
+    sibling.destroy()
+    tab.goToIndex(index)
+  }
+  const onOuterPress = () => sibling.destroy()
+  const sibling = new RootSiblings(
+    (
+      <>
+        <TouchableWithoutFeedback onPress={onOuterPress}>
+          <View style={styles.bg} />
+        </TouchableWithoutFeedback>
+        <View style={[styles.menu, styles.forward]}>
+          {tab.forwardTen.reverse().map((item, i) => (
+            <TouchableOpacity
+              key={item.index}
+              style={[styles.menuItem, i !== 0 && styles.menuItemBorder]}
+              onPress={() => onPressItem(item.index)}>
+              <Text>{item.title || item.url}</Text>
+            </TouchableOpacity>
+          ))}
+        </View>
+      </>
+    ),
+  )
+  return sibling
+}
+
+const styles = StyleSheet.create({
+  bg: {
+    position: 'absolute',
+    top: 0,
+    right: 0,
+    bottom: 0,
+    left: 0,
+    backgroundColor: '#000',
+    opacity: 0.1,
+  },
+  menu: {
+    position: 'absolute',
+    bottom: 80,
+    backgroundColor: '#fff',
+    borderRadius: 8,
+    opacity: 1,
+  },
+  back: {
+    left: 10,
+  },
+  forward: {
+    left: 60,
+  },
+  menuItem: {
+    paddingVertical: 10,
+    paddingLeft: 15,
+    paddingRight: 30,
+  },
+  menuItemBorder: {
+    borderTopWidth: 1,
+    borderTopColor: '#ddd',
+  },
+})