Note insert.

This commit is contained in:
Patrick Fic
2025-10-29 09:33:18 -07:00
parent 22ce0a4703
commit fde918c1ba
10 changed files with 891 additions and 89 deletions

View File

@@ -5,34 +5,16 @@ import { useLocalSearchParams } from "expo-router";
import React, { useCallback, useState } from "react";
import { FlatList, StyleSheet, View } from "react-native";
import {
Button,
Divider,
List,
Modal,
Portal,
Text,
useTheme,
Button,
Divider,
List,
Modal,
Portal,
Text,
useTheme,
} from "react-native-paper";
/**
* JobStatusSelector component contract
* Props:
* - statuses: string[] (list of available statuses)
* - currentStatus: string (currently applied status)
* - onSelect: (status: string) => void (fires when user selects a status)
* - label?: string (optional label for trigger button)
*/
export interface JobStatusSelectorProps {
statuses: string[];
currentStatus: string | undefined;
onSelect: (status: string) => void;
label?: string;
disabled?: boolean;
}
const keyExtractor = (item: string) => item;
export const JobStatusSelector: React.FC<JobStatusSelectorProps> = ({
export const JobStatusSelector = ({
statuses,
currentStatus,
onSelect,
@@ -49,7 +31,7 @@ export const JobStatusSelector: React.FC<JobStatusSelectorProps> = ({
const [updateJobStatus] = useMutation(UPDATE_JOB_STATUS);
const handleSelect = useCallback(
async (status: string) => {
async (status) => {
Haptics.selectionAsync().catch(() => {});
hide();
await updateJobStatus({
@@ -89,7 +71,7 @@ export const JobStatusSelector: React.FC<JobStatusSelectorProps> = ({
<Divider />
<FlatList
data={statuses}
keyExtractor={keyExtractor}
keyExtractor={(item) => item}
renderItem={({ item }) => {
const selected = item === currentStatus;
return (
@@ -155,12 +137,3 @@ const styles = StyleSheet.create({
});
export default JobStatusSelector;
/**
* Usage example:
* <JobStatusSelector
* statuses={availableStatuses}
* currentStatus={job.status}
* onSelect={(newStatus) => console.log('Status changed to', newStatus)}
* />
*/