convex-feedback-ui 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/native/expo/ExpoFeedbackBody.d.ts +1 -1
- package/dist/native/expo/ExpoFeedbackBody.d.ts.map +1 -1
- package/dist/native/expo/ExpoFeedbackBody.js +2 -2
- package/dist/native/expo/ExpoFeedbackBody.js.map +1 -1
- package/dist/native/expo/FeedbackRoutes.d.ts.map +1 -1
- package/dist/native/expo/FeedbackRoutes.js +6 -4
- package/dist/native/expo/FeedbackRoutes.js.map +1 -1
- package/dist/native/expo/FeedbackStack.d.ts +1 -1
- package/dist/native/expo/FeedbackStack.d.ts.map +1 -1
- package/dist/native/expo/FeedbackStack.js +6 -4
- package/dist/native/expo/FeedbackStack.js.map +1 -1
- package/dist/native/expo/FeedbackStackLayout.d.ts +1 -1
- package/dist/native/expo/FeedbackStackLayout.d.ts.map +1 -1
- package/dist/native/expo/FeedbackStackLayout.js +7 -2
- package/dist/native/expo/FeedbackStackLayout.js.map +1 -1
- package/dist/native/expo/types.d.ts +13 -0
- package/dist/native/expo/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/native/expo/ExpoFeedbackBody.tsx +2 -0
- package/src/native/expo/FeedbackRoutes.tsx +34 -25
- package/src/native/expo/FeedbackStack.tsx +29 -24
- package/src/native/expo/FeedbackStackLayout.tsx +9 -1
- package/src/native/expo/README.md +11 -0
- package/src/native/expo/types.ts +12 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { type FeedbackScreenBodyProps } from "../../shared/types/index.js";
|
|
2
2
|
import type { FeedbackScreenStackProps } from "./types.js";
|
|
3
|
-
export declare function ExpoFeedbackBody({ useStack, StackOptions, androidToolbarIcons, ...props }: FeedbackScreenBodyProps & FeedbackScreenStackProps): import("react").JSX.Element;
|
|
3
|
+
export declare function ExpoFeedbackBody({ useStack, StackOptions, androidToolbarIcons, BottomToolbarWrapper, ...props }: FeedbackScreenBodyProps & FeedbackScreenStackProps): import("react").JSX.Element;
|
|
4
4
|
//# sourceMappingURL=ExpoFeedbackBody.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoFeedbackBody.d.ts","sourceRoot":"","sources":["../../../src/native/expo/ExpoFeedbackBody.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,GAAG,KAAK,EACT,EAAE,uBAAuB,GAAG,wBAAwB,+
|
|
1
|
+
{"version":3,"file":"ExpoFeedbackBody.d.ts","sourceRoot":"","sources":["../../../src/native/expo/ExpoFeedbackBody.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAI3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,gBAAgB,CAAC,EAC/B,QAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,GAAG,KAAK,EACT,EAAE,uBAAuB,GAAG,wBAAwB,+BAsCpD"}
|
|
@@ -4,7 +4,7 @@ import { useFeedbackBody } from "../../shared/context/FeedbackBodyProvider.js";
|
|
|
4
4
|
import {} from "../../shared/types/index.js";
|
|
5
5
|
import { FeedbackScreenContent } from "../shared/ui/BodyContent.js";
|
|
6
6
|
import { FeedbackStack } from "./FeedbackStack.js";
|
|
7
|
-
export function ExpoFeedbackBody({ useStack = true, StackOptions, androidToolbarIcons, ...props }) {
|
|
7
|
+
export function ExpoFeedbackBody({ useStack = true, StackOptions, androidToolbarIcons, BottomToolbarWrapper, ...props }) {
|
|
8
8
|
const { query, isSearching, setIsSearching, setSelectedEntryId } = useFeedbackBody();
|
|
9
9
|
const searchRef = useRef(null);
|
|
10
10
|
const onEntryOpen = (entryId) => {
|
|
@@ -21,6 +21,6 @@ export function ExpoFeedbackBody({ useStack = true, StackOptions, androidToolbar
|
|
|
21
21
|
}, [query, isSearching, setIsSearching]);
|
|
22
22
|
if (!useStack)
|
|
23
23
|
return _jsx(FeedbackScreenContent, { onEntryOpen: onEntryOpen, ...props });
|
|
24
|
-
return (_jsx(FeedbackStack, { stackOptions: StackOptions, searchRef: searchRef, androidToolbarIcons: androidToolbarIcons, children: _jsx(FeedbackScreenContent, { hideBackButton: true, showHeader: false, onEntryOpen: onEntryOpen, ...props }) }));
|
|
24
|
+
return (_jsx(FeedbackStack, { stackOptions: StackOptions, searchRef: searchRef, androidToolbarIcons: androidToolbarIcons, BottomToolbarWrapper: BottomToolbarWrapper, children: _jsx(FeedbackScreenContent, { hideBackButton: true, showHeader: false, onEntryOpen: onEntryOpen, ...props }) }));
|
|
25
25
|
}
|
|
26
26
|
//# sourceMappingURL=ExpoFeedbackBody.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExpoFeedbackBody.js","sourceRoot":"","sources":["../../../src/native/expo/ExpoFeedbackBody.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAgC,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,GAAG,IAAI,EACf,YAAY,EACZ,mBAAmB,EACnB,GAAG,KAAK,EAC2C;IACnD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAC9D,eAAe,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,EAAE;QACtC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAChD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1C,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ;QACX,OAAO,KAAC,qBAAqB,IAAC,WAAW,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;IAExE,OAAO,CACL,KAAC,aAAa,IACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ExpoFeedbackBody.js","sourceRoot":"","sources":["../../../src/native/expo/ExpoFeedbackBody.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAgC,MAAM,6BAA6B,CAAC;AAE3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,UAAU,gBAAgB,CAAC,EAC/B,QAAQ,GAAG,IAAI,EACf,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,GAAG,KAAK,EAC2C;IACnD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAC9D,eAAe,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAElD,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,EAAE;QACtC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAChD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QAE1C,IAAI,SAAS,KAAK,WAAW,EAAE,CAAC;YAC9B,cAAc,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IAEzC,IAAI,CAAC,QAAQ;QACX,OAAO,KAAC,qBAAqB,IAAC,WAAW,EAAE,WAAW,KAAM,KAAK,GAAI,CAAC;IAExE,OAAO,CACL,KAAC,aAAa,IACZ,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,oBAAoB,EAAE,oBAAoB,YAE1C,KAAC,qBAAqB,IACpB,cAAc,QACd,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,WAAW,KACpB,KAAK,GACT,GACY,CACjB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackRoutes.d.ts","sourceRoot":"","sources":["../../../src/native/expo/FeedbackRoutes.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FeedbackRoutes.d.ts","sourceRoot":"","sources":["../../../src/native/expo/FeedbackRoutes.tsx"],"names":[],"mappings":"AAiBA,wBAAgB,mBAAmB,gCAyHlC;AAED,wBAAgB,mBAAmB,gCAelC;AA0CD,wBAAgB,oBAAoB,gCAqDnC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Stack, useLocalSearchParams, useRouter } from "expo-router";
|
|
3
|
+
import { Fragment } from "react";
|
|
3
4
|
import { useEffect, useRef, useState } from "react";
|
|
4
5
|
import { useFeedbackBody } from "../../shared/context/FeedbackBodyProvider.js";
|
|
5
6
|
import { useFeedbackUi } from "../../shared/context/FeedbackProvider.js";
|
|
@@ -14,9 +15,10 @@ import { useRoutedFeedback } from "./RoutedFeedbackContext.js";
|
|
|
14
15
|
export function FeedbackBoardScreen() {
|
|
15
16
|
const { query, isSearching, setQuery, setIsSearching, enabledKinds, statusFilter, setStatusFilter, } = useFeedbackBody();
|
|
16
17
|
const { messages, theme } = useFeedbackUi();
|
|
17
|
-
const { routes, colors, androidToolbarIcons } = useRoutedFeedback();
|
|
18
|
+
const { routes, colors, androidToolbarIcons, bottomToolbarWrapper: BottomToolbarWrapper, } = useRoutedFeedback();
|
|
18
19
|
const router = useRouter();
|
|
19
20
|
const searchRef = useRef(null);
|
|
21
|
+
const BottomToolbarWrapperComponent = BottomToolbarWrapper ?? Fragment;
|
|
20
22
|
useEffect(() => {
|
|
21
23
|
const searching = query.trim().length > 0;
|
|
22
24
|
if (searching !== isSearching)
|
|
@@ -36,9 +38,9 @@ export function FeedbackBoardScreen() {
|
|
|
36
38
|
relativeToDirectory: true,
|
|
37
39
|
}), tintColor: theme.colors.primary, children: createEntryLabel(enabledKinds, messages) }) }), _jsx(Stack.Toolbar, { placement: "left", children: _jsx(Stack.Toolbar.Button, { hidden: !router.canGoBack(), icon: process.env.EXPO_OS === "ios"
|
|
38
40
|
? "chevron.backward"
|
|
39
|
-
: androidToolbarIcons.back, accessibilityLabel: messages.entry.back, onPress: () => router.back(), tintColor: theme.colors.text, children: messages.entry.back }) }), _jsx(Stack.SearchBar, { ref: searchRef, placeholder: messages.board.searchPlaceholder, onChangeText: (event) => setQuery(event.nativeEvent.text), onFocus: () => setIsSearching(true), onBlur: () => setIsSearching(query.trim().length > 0), obscureBackground: false, allowToolbarIntegration: true, hideNavigationBar: false, textColor: theme.colors.text }), _jsxs(Stack.Toolbar, { placement: "bottom", children: [_jsx(Stack.Toolbar.SearchBarSlot, {}), _jsx(Stack.Toolbar.Spacer, {}), _jsx(Stack.Toolbar.Menu, { icon: process.env.EXPO_OS === "ios"
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
: androidToolbarIcons.back, accessibilityLabel: messages.entry.back, onPress: () => router.back(), tintColor: theme.colors.text, children: messages.entry.back }) }), _jsx(Stack.SearchBar, { ref: searchRef, placeholder: messages.board.searchPlaceholder, onChangeText: (event) => setQuery(event.nativeEvent.text), onFocus: () => setIsSearching(true), onBlur: () => setIsSearching(query.trim().length > 0), obscureBackground: false, allowToolbarIntegration: true, hideNavigationBar: false, textColor: theme.colors.text }), _jsx(BottomToolbarWrapperComponent, { children: _jsxs(Stack.Toolbar, { placement: "bottom", children: [_jsx(Stack.Toolbar.SearchBarSlot, {}), _jsx(Stack.Toolbar.Spacer, {}), _jsx(Stack.Toolbar.Menu, { icon: process.env.EXPO_OS === "ios"
|
|
42
|
+
? "line.3.horizontal.decrease"
|
|
43
|
+
: androidToolbarIcons.filter, title: messages.board.statusFilter, accessibilityLabel: messages.board.statusFilter, tintColor: theme.colors.text, children: entryStatusChoices(messages).map(({ value, label }) => (_jsx(Stack.Toolbar.MenuAction, { isOn: statusFilter === value, onPress: () => setStatusFilter(value), children: label }, value))) })] }) })] }));
|
|
42
44
|
}
|
|
43
45
|
export function FeedbackEntryScreen() {
|
|
44
46
|
const params = useLocalSearchParams();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackRoutes.js","sourceRoot":"","sources":["../../../src/native/expo/FeedbackRoutes.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAIpD,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,UAAU,mBAAmB;IACjC,MAAM,EACJ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,eAAe,GAChB,GAAG,eAAe,EAAE,CAAC;IACtB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAC5C,MAAM,
|
|
1
|
+
{"version":3,"file":"FeedbackRoutes.js","sourceRoot":"","sources":["../../../src/native/expo/FeedbackRoutes.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { FeedbackStackProps } from "./types";
|
|
2
|
-
export declare function FeedbackStack({ searchRef, stackOptions, androidToolbarIcons, children, }: FeedbackStackProps): import("react").JSX.Element;
|
|
2
|
+
export declare function FeedbackStack({ searchRef, stackOptions, androidToolbarIcons, BottomToolbarWrapper, children, }: FeedbackStackProps): import("react").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=FeedbackStack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackStack.d.ts","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStack.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FeedbackStack.d.ts","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStack.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,YAAY,EACZ,mBAAwB,EACxB,oBAAoB,EACpB,QAAQ,GACT,EAAE,kBAAkB,+BA4HpB"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Stack, useRouter } from "expo-router";
|
|
3
|
+
import { Fragment } from "react";
|
|
3
4
|
import { useFeedbackBody } from "../../shared/context/FeedbackBodyProvider";
|
|
4
5
|
import { useFeedbackUi } from "../../shared/context/FeedbackProvider";
|
|
5
6
|
import { createEntryLabel, entryStatusChoices } from "../../shared/helpers";
|
|
6
|
-
export function FeedbackStack({ searchRef, stackOptions, androidToolbarIcons = {}, children, }) {
|
|
7
|
+
export function FeedbackStack({ searchRef, stackOptions, androidToolbarIcons = {}, BottomToolbarWrapper, children, }) {
|
|
7
8
|
const { query, enabledKinds, selectedEntryId, setQuery, setShowForm, setIsSearching, setSelectedEntryId, statusFilter, setStatusFilter, } = useFeedbackBody();
|
|
8
9
|
const { messages, theme } = useFeedbackUi();
|
|
9
10
|
const router = useRouter();
|
|
11
|
+
const ToolbarWrapper = BottomToolbarWrapper ?? Fragment;
|
|
10
12
|
const canGoBack = !!selectedEntryId || router.canGoBack();
|
|
11
13
|
const handleBackPress = () => {
|
|
12
14
|
if (selectedEntryId === null) {
|
|
@@ -40,8 +42,8 @@ export function FeedbackStack({ searchRef, stackOptions, androidToolbarIcons = {
|
|
|
40
42
|
if (selectedEntryId)
|
|
41
43
|
setSelectedEntryId(null);
|
|
42
44
|
setIsSearching(true);
|
|
43
|
-
}, onBlur: () => setIsSearching(false), obscureBackground: false, allowToolbarIntegration: true, hideNavigationBar: false, ref: searchRef, textColor: theme.colors.text }), _jsxs(Stack.Toolbar, { placement: "bottom", children: [_jsx(Stack.Toolbar.SearchBarSlot, {}), _jsx(Stack.Toolbar.Spacer, {}), _jsx(Stack.Toolbar.Menu, { icon: process.env.EXPO_OS === "ios"
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
}, onBlur: () => setIsSearching(false), obscureBackground: false, allowToolbarIntegration: true, hideNavigationBar: false, ref: searchRef, textColor: theme.colors.text }), _jsx(ToolbarWrapper, { children: _jsxs(Stack.Toolbar, { placement: "bottom", children: [_jsx(Stack.Toolbar.SearchBarSlot, {}), _jsx(Stack.Toolbar.Spacer, {}), _jsx(Stack.Toolbar.Menu, { icon: process.env.EXPO_OS === "ios"
|
|
46
|
+
? "line.3.horizontal.decrease"
|
|
47
|
+
: androidToolbarIcons.filter, title: messages.board.statusFilter, accessibilityLabel: messages.board.statusFilter, tintColor: theme.colors.text, children: entryStatusChoices(messages).map(({ value, label }) => (_jsx(Stack.Toolbar.MenuAction, { isOn: statusFilter === value, onPress: () => setStatusFilter(value), children: label }, value))) })] }) })] }));
|
|
46
48
|
}
|
|
47
49
|
//# sourceMappingURL=FeedbackStack.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackStack.js","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStack.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG5E,MAAM,UAAU,aAAa,CAAC,EAC5B,SAAS,EACT,YAAY,EACZ,mBAAmB,GAAG,EAAE,EACxB,QAAQ,GACW;IACnB,MAAM,EACJ,KAAK,EACL,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,eAAe,GAChB,GAAG,eAAe,EAAE,CAAC;IACtB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,aAAa,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedbackStack.js","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStack.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { FeedbackStackLayoutProps } from "./types.js";
|
|
2
|
-
export declare function FeedbackStackLayout({ hooks, messages, theme, unstyled, entrySort, commentSort, enabledKinds, maxCommentDepth, debounceDuration, collectMetadata, emptyState, loading, transformComments, renderActor, routes: routeOverrides, screenOptions, boardOptions, entryOptions, createOptions, androidToolbarIcons, primaryColor, primaryForeground, backgroundColor, surfaceColor, textColor, mutedColor, borderColor, dangerColor, }: FeedbackStackLayoutProps): import("react").JSX.Element;
|
|
2
|
+
export declare function FeedbackStackLayout({ hooks, messages, theme, unstyled, entrySort, commentSort, enabledKinds, maxCommentDepth, debounceDuration, collectMetadata, emptyState, loading, transformComments, renderActor, routes: routeOverrides, screenOptions, boardOptions, entryOptions, createOptions, androidToolbarIcons, BottomToolbarWrapper, primaryColor, primaryForeground, backgroundColor, surfaceColor, textColor, mutedColor, borderColor, dangerColor, }: FeedbackStackLayoutProps): import("react").JSX.Element;
|
|
3
3
|
//# sourceMappingURL=FeedbackStackLayout.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackStackLayout.d.ts","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStackLayout.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAiB,EACjB,WAAmB,EACnB,YAAoB,EACpB,eAAmB,EACnB,gBAAsB,EACtB,eAAe,EACf,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,MAAM,EAAE,cAAc,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,mBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,GACZ,EAAE,wBAAwB,+
|
|
1
|
+
{"version":3,"file":"FeedbackStackLayout.d.ts","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStackLayout.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAiB,EACjB,WAAmB,EACnB,YAAoB,EACpB,eAAmB,EACnB,gBAAsB,EACtB,eAAe,EACf,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,MAAM,EAAE,cAAc,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,mBAAwB,EACxB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,GACZ,EAAE,wBAAwB,+BAsF1B"}
|
|
@@ -8,7 +8,7 @@ import { mergeFeedbackTheme } from "../../shared/theme.js";
|
|
|
8
8
|
import { collectExpoMetadata } from "./metadata.js";
|
|
9
9
|
import { RoutedFeedbackProvider } from "./RoutedFeedbackContext.js";
|
|
10
10
|
import { resolveFeedbackRoutes } from "./routes.js";
|
|
11
|
-
export function FeedbackStackLayout({ hooks, messages, theme, unstyled, entrySort = "top", commentSort = "top", enabledKinds = kinds, maxCommentDepth = 5, debounceDuration = 300, collectMetadata, emptyState, loading, transformComments, renderActor, routes: routeOverrides, screenOptions, boardOptions, entryOptions, createOptions, androidToolbarIcons = {}, primaryColor, primaryForeground, backgroundColor, surfaceColor, textColor, mutedColor, borderColor, dangerColor, }) {
|
|
11
|
+
export function FeedbackStackLayout({ hooks, messages, theme, unstyled, entrySort = "top", commentSort = "top", enabledKinds = kinds, maxCommentDepth = 5, debounceDuration = 300, collectMetadata, emptyState, loading, transformComments, renderActor, routes: routeOverrides, screenOptions, boardOptions, entryOptions, createOptions, androidToolbarIcons = {}, BottomToolbarWrapper, primaryColor, primaryForeground, backgroundColor, surfaceColor, textColor, mutedColor, borderColor, dangerColor, }) {
|
|
12
12
|
const routes = resolveFeedbackRoutes(routeOverrides);
|
|
13
13
|
const resolvedMessages = mergeFeedbackMessages(messages);
|
|
14
14
|
const resolvedTheme = mergeFeedbackTheme(theme);
|
|
@@ -32,7 +32,12 @@ export function FeedbackStackLayout({ hooks, messages, theme, unstyled, entrySor
|
|
|
32
32
|
headerTintColor: textColor ?? resolvedTheme.colors.text,
|
|
33
33
|
contentStyle: { backgroundColor: background },
|
|
34
34
|
};
|
|
35
|
-
return (_jsx(FeedbackProvider, { messages: messages, theme: theme, unstyled: unstyled, children: _jsx(FeedbackBodyProvider, { hooks: hooks, entrySort: entrySort, commentSort: commentSort, enabledKinds: enabledKinds, maxCommentDepth: maxCommentDepth, debounceDuration: debounceDuration, collectMetadata: collectMetadata, emptyState: emptyState, loading: loading, collectStandardMetadata: collectExpoMetadata, transformComments: transformComments, renderActor: renderActor, children: _jsx(RoutedFeedbackProvider, { value: {
|
|
35
|
+
return (_jsx(FeedbackProvider, { messages: messages, theme: theme, unstyled: unstyled, children: _jsx(FeedbackBodyProvider, { hooks: hooks, entrySort: entrySort, commentSort: commentSort, enabledKinds: enabledKinds, maxCommentDepth: maxCommentDepth, debounceDuration: debounceDuration, collectMetadata: collectMetadata, emptyState: emptyState, loading: loading, collectStandardMetadata: collectExpoMetadata, transformComments: transformComments, renderActor: renderActor, children: _jsx(RoutedFeedbackProvider, { value: {
|
|
36
|
+
routes,
|
|
37
|
+
colors,
|
|
38
|
+
androidToolbarIcons,
|
|
39
|
+
bottomToolbarWrapper: BottomToolbarWrapper,
|
|
40
|
+
}, children: _jsxs(Stack, { children: [_jsx(Stack.Screen, { name: routes.board, options: {
|
|
36
41
|
...defaults,
|
|
37
42
|
headerTitle: boardTitle,
|
|
38
43
|
headerTransparent: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedbackStackLayout.js","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStackLayout.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAqC,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,UAAU,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,KAAK,EACnB,YAAY,GAAG,KAAK,EACpB,eAAe,GAAG,CAAC,EACnB,gBAAgB,GAAG,GAAG,EACtB,eAAe,EACf,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,MAAM,EAAE,cAAc,EACtB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,mBAAmB,GAAG,EAAE,EACxB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,WAAW,GACc;IACzB,MAAM,MAAM,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG;QACb,YAAY;QACZ,iBAAiB;QACjB,eAAe;QACf,YAAY;QACZ,SAAS;QACT,UAAU;QACV,WAAW;QACX,WAAW;KACZ,CAAC;IACF,MAAM,UAAU,GAAG,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;IACtE,MAAM,UAAU,GACd,YAAY,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,gBAAgB,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC;QACnD,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;IACnC,MAAM,QAAQ,GAAiC;QAC7C,WAAW,EAAE,IAAI;QACjB,2BAA2B,EAAE,SAAS;QACtC,eAAe,EAAE,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI;QACvD,YAAY,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE;KAC9C,CAAC;IAEF,OAAO,CACL,KAAC,gBAAgB,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,YACpE,KAAC,oBAAoB,IACnB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,OAAO,EAChB,uBAAuB,EAAE,mBAAmB,EAC5C,iBAAiB,EAAE,iBAAiB,EACpC,WAAW,EAAE,WAAW,YAExB,KAAC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"FeedbackStackLayout.js","sourceRoot":"","sources":["../../../src/native/expo/FeedbackStackLayout.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import type { StackScreenProps } from "expo-router";
|
|
2
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
3
|
import type { ImageSourcePropType } from "react-native";
|
|
3
4
|
import type { SearchBarCommands } from "react-native-screens";
|
|
4
5
|
import type { FeedbackColorProps, FeedbackScreenRootProps } from "../../shared/types";
|
|
6
|
+
/** Optional wrapper used around Expo Router bottom toolbars. */
|
|
7
|
+
export type BottomToolbarWrapper = ComponentType<{
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
}>;
|
|
5
10
|
interface FeedbackScreenWithStack {
|
|
6
11
|
useStack?: true;
|
|
7
12
|
StackOptions?: StackScreenProps["options"];
|
|
8
13
|
/** Android image sources for toolbar actions. iOS continues to use SF Symbols. */
|
|
9
14
|
androidToolbarIcons?: FeedbackAndroidToolbarIcons;
|
|
15
|
+
/** Optional component wrapping the bottom search/filter toolbar. */
|
|
16
|
+
BottomToolbarWrapper?: BottomToolbarWrapper;
|
|
10
17
|
}
|
|
11
18
|
interface FeedbackScreenWithoutStack {
|
|
12
19
|
useStack?: false;
|
|
13
20
|
StackOptions?: never;
|
|
14
21
|
androidToolbarIcons?: never;
|
|
22
|
+
BottomToolbarWrapper?: never;
|
|
15
23
|
}
|
|
16
24
|
export type FeedbackScreenStackProps = FeedbackScreenWithStack | FeedbackScreenWithoutStack;
|
|
17
25
|
export type ExpoFeedbackScreenProps = FeedbackScreenStackProps & FeedbackScreenRootProps;
|
|
@@ -19,6 +27,8 @@ export interface FeedbackStackProps {
|
|
|
19
27
|
searchRef: React.RefObject<SearchBarCommands | null>;
|
|
20
28
|
stackOptions?: StackScreenProps["options"];
|
|
21
29
|
androidToolbarIcons?: FeedbackAndroidToolbarIcons;
|
|
30
|
+
/** Optional component wrapping the bottom search/filter toolbar. */
|
|
31
|
+
BottomToolbarWrapper?: BottomToolbarWrapper;
|
|
22
32
|
children: React.ReactNode;
|
|
23
33
|
}
|
|
24
34
|
/** File names used by the routed feedback stack. */
|
|
@@ -54,6 +64,8 @@ export interface FeedbackStackLayoutProps extends FeedbackScreenRootProps {
|
|
|
54
64
|
createOptions?: FeedbackStackScreenOptions;
|
|
55
65
|
/** Android image sources for toolbar actions. iOS continues to use SF Symbols. */
|
|
56
66
|
androidToolbarIcons?: FeedbackAndroidToolbarIcons;
|
|
67
|
+
/** Optional component wrapping the bottom search/filter toolbar. */
|
|
68
|
+
BottomToolbarWrapper?: BottomToolbarWrapper;
|
|
57
69
|
}
|
|
58
70
|
export interface FeedbackCreateStackLayoutProps {
|
|
59
71
|
/** Options shared by the create form and suggested-entry screens. */
|
|
@@ -67,6 +79,7 @@ export interface RoutedFeedbackContextValue {
|
|
|
67
79
|
routes: FeedbackRouteNames;
|
|
68
80
|
colors: FeedbackColorProps;
|
|
69
81
|
androidToolbarIcons: FeedbackAndroidToolbarIcons;
|
|
82
|
+
bottomToolbarWrapper?: BottomToolbarWrapper;
|
|
70
83
|
}
|
|
71
84
|
export {};
|
|
72
85
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/native/expo/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,UAAU,uBAAuB;IAC/B,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC3C,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/native/expo/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -12,6 +12,7 @@ export function ExpoFeedbackBody({
|
|
|
12
12
|
useStack = true,
|
|
13
13
|
StackOptions,
|
|
14
14
|
androidToolbarIcons,
|
|
15
|
+
BottomToolbarWrapper,
|
|
15
16
|
...props
|
|
16
17
|
}: FeedbackScreenBodyProps & FeedbackScreenStackProps) {
|
|
17
18
|
const { query, isSearching, setIsSearching, setSelectedEntryId } =
|
|
@@ -41,6 +42,7 @@ export function ExpoFeedbackBody({
|
|
|
41
42
|
stackOptions={StackOptions}
|
|
42
43
|
searchRef={searchRef}
|
|
43
44
|
androidToolbarIcons={androidToolbarIcons}
|
|
45
|
+
BottomToolbarWrapper={BottomToolbarWrapper}
|
|
44
46
|
>
|
|
45
47
|
<FeedbackScreenContent
|
|
46
48
|
hideBackButton
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Stack, useLocalSearchParams, useRouter } from "expo-router";
|
|
2
|
+
import { Fragment } from "react";
|
|
2
3
|
import { useEffect, useRef, useState } from "react";
|
|
3
4
|
import type { SearchBarCommands } from "react-native-screens";
|
|
4
5
|
import type { EntryKind } from "convex-feedback";
|
|
@@ -25,9 +26,15 @@ export function FeedbackBoardScreen() {
|
|
|
25
26
|
setStatusFilter,
|
|
26
27
|
} = useFeedbackBody();
|
|
27
28
|
const { messages, theme } = useFeedbackUi();
|
|
28
|
-
const {
|
|
29
|
+
const {
|
|
30
|
+
routes,
|
|
31
|
+
colors,
|
|
32
|
+
androidToolbarIcons,
|
|
33
|
+
bottomToolbarWrapper: BottomToolbarWrapper,
|
|
34
|
+
} = useRoutedFeedback();
|
|
29
35
|
const router = useRouter();
|
|
30
36
|
const searchRef = useRef<SearchBarCommands>(null);
|
|
37
|
+
const BottomToolbarWrapperComponent = BottomToolbarWrapper ?? Fragment;
|
|
31
38
|
|
|
32
39
|
useEffect(() => {
|
|
33
40
|
const searching = query.trim().length > 0;
|
|
@@ -101,30 +108,32 @@ export function FeedbackBoardScreen() {
|
|
|
101
108
|
hideNavigationBar={false}
|
|
102
109
|
textColor={theme.colors.text}
|
|
103
110
|
/>
|
|
104
|
-
<
|
|
105
|
-
<Stack.Toolbar
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
111
|
+
<BottomToolbarWrapperComponent>
|
|
112
|
+
<Stack.Toolbar placement="bottom">
|
|
113
|
+
<Stack.Toolbar.SearchBarSlot />
|
|
114
|
+
<Stack.Toolbar.Spacer />
|
|
115
|
+
<Stack.Toolbar.Menu
|
|
116
|
+
icon={
|
|
117
|
+
process.env.EXPO_OS === "ios"
|
|
118
|
+
? "line.3.horizontal.decrease"
|
|
119
|
+
: androidToolbarIcons.filter
|
|
120
|
+
}
|
|
121
|
+
title={messages.board.statusFilter}
|
|
122
|
+
accessibilityLabel={messages.board.statusFilter}
|
|
123
|
+
tintColor={theme.colors.text}
|
|
124
|
+
>
|
|
125
|
+
{entryStatusChoices(messages).map(({ value, label }) => (
|
|
126
|
+
<Stack.Toolbar.MenuAction
|
|
127
|
+
key={value}
|
|
128
|
+
isOn={statusFilter === value}
|
|
129
|
+
onPress={() => setStatusFilter(value)}
|
|
130
|
+
>
|
|
131
|
+
{label}
|
|
132
|
+
</Stack.Toolbar.MenuAction>
|
|
133
|
+
))}
|
|
134
|
+
</Stack.Toolbar.Menu>
|
|
135
|
+
</Stack.Toolbar>
|
|
136
|
+
</BottomToolbarWrapperComponent>
|
|
128
137
|
</>
|
|
129
138
|
);
|
|
130
139
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Stack, useRouter } from "expo-router";
|
|
2
|
+
import { Fragment } from "react";
|
|
2
3
|
import { useFeedbackBody } from "../../shared/context/FeedbackBodyProvider";
|
|
3
4
|
import { useFeedbackUi } from "../../shared/context/FeedbackProvider";
|
|
4
5
|
import { createEntryLabel, entryStatusChoices } from "../../shared/helpers";
|
|
@@ -8,6 +9,7 @@ export function FeedbackStack({
|
|
|
8
9
|
searchRef,
|
|
9
10
|
stackOptions,
|
|
10
11
|
androidToolbarIcons = {},
|
|
12
|
+
BottomToolbarWrapper,
|
|
11
13
|
children,
|
|
12
14
|
}: FeedbackStackProps) {
|
|
13
15
|
const {
|
|
@@ -23,6 +25,7 @@ export function FeedbackStack({
|
|
|
23
25
|
} = useFeedbackBody();
|
|
24
26
|
const { messages, theme } = useFeedbackUi();
|
|
25
27
|
const router = useRouter();
|
|
28
|
+
const ToolbarWrapper = BottomToolbarWrapper ?? Fragment;
|
|
26
29
|
|
|
27
30
|
const canGoBack = !!selectedEntryId || router.canGoBack();
|
|
28
31
|
|
|
@@ -104,30 +107,32 @@ export function FeedbackStack({
|
|
|
104
107
|
ref={searchRef}
|
|
105
108
|
textColor={theme.colors.text}
|
|
106
109
|
/>
|
|
107
|
-
<
|
|
108
|
-
<Stack.Toolbar
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
110
|
+
<ToolbarWrapper>
|
|
111
|
+
<Stack.Toolbar placement="bottom">
|
|
112
|
+
<Stack.Toolbar.SearchBarSlot />
|
|
113
|
+
<Stack.Toolbar.Spacer />
|
|
114
|
+
<Stack.Toolbar.Menu
|
|
115
|
+
icon={
|
|
116
|
+
process.env.EXPO_OS === "ios"
|
|
117
|
+
? "line.3.horizontal.decrease"
|
|
118
|
+
: androidToolbarIcons.filter
|
|
119
|
+
}
|
|
120
|
+
title={messages.board.statusFilter}
|
|
121
|
+
accessibilityLabel={messages.board.statusFilter}
|
|
122
|
+
tintColor={theme.colors.text}
|
|
123
|
+
>
|
|
124
|
+
{entryStatusChoices(messages).map(({ value, label }) => (
|
|
125
|
+
<Stack.Toolbar.MenuAction
|
|
126
|
+
key={value}
|
|
127
|
+
isOn={statusFilter === value}
|
|
128
|
+
onPress={() => setStatusFilter(value)}
|
|
129
|
+
>
|
|
130
|
+
{label}
|
|
131
|
+
</Stack.Toolbar.MenuAction>
|
|
132
|
+
))}
|
|
133
|
+
</Stack.Toolbar.Menu>
|
|
134
|
+
</Stack.Toolbar>
|
|
135
|
+
</ToolbarWrapper>
|
|
131
136
|
</>
|
|
132
137
|
);
|
|
133
138
|
}
|
|
@@ -31,6 +31,7 @@ export function FeedbackStackLayout({
|
|
|
31
31
|
entryOptions,
|
|
32
32
|
createOptions,
|
|
33
33
|
androidToolbarIcons = {},
|
|
34
|
+
BottomToolbarWrapper,
|
|
34
35
|
primaryColor,
|
|
35
36
|
primaryForeground,
|
|
36
37
|
backgroundColor,
|
|
@@ -81,7 +82,14 @@ export function FeedbackStackLayout({
|
|
|
81
82
|
transformComments={transformComments}
|
|
82
83
|
renderActor={renderActor}
|
|
83
84
|
>
|
|
84
|
-
<RoutedFeedbackProvider
|
|
85
|
+
<RoutedFeedbackProvider
|
|
86
|
+
value={{
|
|
87
|
+
routes,
|
|
88
|
+
colors,
|
|
89
|
+
androidToolbarIcons,
|
|
90
|
+
bottomToolbarWrapper: BottomToolbarWrapper,
|
|
91
|
+
}}
|
|
92
|
+
>
|
|
85
93
|
<Stack>
|
|
86
94
|
<Stack.Screen
|
|
87
95
|
name={routes.board}
|
|
@@ -37,5 +37,16 @@ Toolbar actions retain their package-provided SF Symbols on iOS. Pass
|
|
|
37
37
|
`ImageSourcePropType` values for the create, back, close, and filter actions.
|
|
38
38
|
Missing Android images fall back to text labels.
|
|
39
39
|
|
|
40
|
+
> [!WARNING]
|
|
41
|
+
> If the filter toolbar button is intermittently broken, especially on iOS 26+, pass `Host` from `@expo/ui/swift-ui` to `BottomToolbarWrapper`. This wraps every bottom toolbar:
|
|
42
|
+
>
|
|
43
|
+
> ```tsx
|
|
44
|
+
> import { Host } from "@expo/ui/swift-ui";
|
|
45
|
+
>
|
|
46
|
+
> <FeedbackScreen hooks={feedbackHooks} BottomToolbarWrapper={Host} />;
|
|
47
|
+
> ```
|
|
48
|
+
|
|
49
|
+
Use the same prop on `FeedbackStackLayout` for routed navigation.
|
|
50
|
+
|
|
40
51
|
The existing `FeedbackScreen` remains the self-contained API for conditional
|
|
41
52
|
in-screen navigation.
|
package/src/native/expo/types.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { StackScreenProps } from "expo-router";
|
|
2
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
3
|
import type { ImageSourcePropType } from "react-native";
|
|
3
4
|
import type { SearchBarCommands } from "react-native-screens";
|
|
4
5
|
import type {
|
|
@@ -6,16 +7,22 @@ import type {
|
|
|
6
7
|
FeedbackScreenRootProps,
|
|
7
8
|
} from "../../shared/types";
|
|
8
9
|
|
|
10
|
+
/** Optional wrapper used around Expo Router bottom toolbars. */
|
|
11
|
+
export type BottomToolbarWrapper = ComponentType<{ children: ReactNode }>;
|
|
12
|
+
|
|
9
13
|
interface FeedbackScreenWithStack {
|
|
10
14
|
useStack?: true;
|
|
11
15
|
StackOptions?: StackScreenProps["options"];
|
|
12
16
|
/** Android image sources for toolbar actions. iOS continues to use SF Symbols. */
|
|
13
17
|
androidToolbarIcons?: FeedbackAndroidToolbarIcons;
|
|
18
|
+
/** Optional component wrapping the bottom search/filter toolbar. */
|
|
19
|
+
BottomToolbarWrapper?: BottomToolbarWrapper;
|
|
14
20
|
}
|
|
15
21
|
interface FeedbackScreenWithoutStack {
|
|
16
22
|
useStack?: false;
|
|
17
23
|
StackOptions?: never;
|
|
18
24
|
androidToolbarIcons?: never;
|
|
25
|
+
BottomToolbarWrapper?: never;
|
|
19
26
|
}
|
|
20
27
|
export type FeedbackScreenStackProps =
|
|
21
28
|
FeedbackScreenWithStack | FeedbackScreenWithoutStack;
|
|
@@ -27,6 +34,8 @@ export interface FeedbackStackProps {
|
|
|
27
34
|
searchRef: React.RefObject<SearchBarCommands | null>;
|
|
28
35
|
stackOptions?: StackScreenProps["options"];
|
|
29
36
|
androidToolbarIcons?: FeedbackAndroidToolbarIcons;
|
|
37
|
+
/** Optional component wrapping the bottom search/filter toolbar. */
|
|
38
|
+
BottomToolbarWrapper?: BottomToolbarWrapper;
|
|
30
39
|
children: React.ReactNode;
|
|
31
40
|
}
|
|
32
41
|
|
|
@@ -69,6 +78,8 @@ export interface FeedbackStackLayoutProps extends FeedbackScreenRootProps {
|
|
|
69
78
|
createOptions?: FeedbackStackScreenOptions;
|
|
70
79
|
/** Android image sources for toolbar actions. iOS continues to use SF Symbols. */
|
|
71
80
|
androidToolbarIcons?: FeedbackAndroidToolbarIcons;
|
|
81
|
+
/** Optional component wrapping the bottom search/filter toolbar. */
|
|
82
|
+
BottomToolbarWrapper?: BottomToolbarWrapper;
|
|
72
83
|
}
|
|
73
84
|
|
|
74
85
|
export interface FeedbackCreateStackLayoutProps {
|
|
@@ -84,4 +95,5 @@ export interface RoutedFeedbackContextValue {
|
|
|
84
95
|
routes: FeedbackRouteNames;
|
|
85
96
|
colors: FeedbackColorProps;
|
|
86
97
|
androidToolbarIcons: FeedbackAndroidToolbarIcons;
|
|
98
|
+
bottomToolbarWrapper?: BottomToolbarWrapper;
|
|
87
99
|
}
|