diff --git a/app/requests/WoW/ExportSearch.ts b/app/requests/WoW/ExportSearch.ts index d8fd2546..14f2af97 100644 --- a/app/requests/WoW/ExportSearch.ts +++ b/app/requests/WoW/ExportSearch.ts @@ -13,7 +13,8 @@ interface WoWExportSearchProps { connectedRealmIDs: Record } -interface ExportItem { +export interface ExportItem { + [key: string]: any connectedRealmID: number connectedRealmNames: Array itemQuantity: number diff --git a/app/routes/wow/export-search/index.tsx b/app/routes/wow/export-search/index.tsx index 3f16cda8..72daba1b 100644 --- a/app/routes/wow/export-search/index.tsx +++ b/app/routes/wow/export-search/index.tsx @@ -5,7 +5,7 @@ import { PageWrapper } from '~/components/Common' import DebouncedSelectInput from '~/components/Common/DebouncedSelectInput' import SmallFormContainer from '~/components/form/SmallFormContainer' import { useTypedSelector } from '~/redux/useTypedSelector' -import type { WoWExportResponse } from '~/requests/WoW/ExportSearch' +import type { ExportItem, WoWExportResponse } from '~/requests/WoW/ExportSearch' import WoWExportSearch from '~/requests/WoW/ExportSearch' import { getUserSessionData } from '~/sessions' import { parseItemsForDataListSelect } from '~/utils/items/id_to_item' @@ -14,6 +14,10 @@ import { useActionData, useNavigation } from '@remix-run/react' import { InputWithLabel } from '~/components/form/InputWithLabel' import { getItemIDByName } from '~/utils/items' import Select from '~/components/form/select' +import NoResults from '~/components/Common/NoResults' +import SmallTable from '~/components/WoWResults/FullScan/SmallTable' +import type { ColumnList } from '~/components/types' +import ExternalLink from '~/components/utilities/ExternalLink' const parseNumber = z.string().transform((value) => parseInt(value, 10)) @@ -39,32 +43,35 @@ export const action: ActionFunction = async ({ request }) => { return json({ exception: 'Invalid Input' }) } - return await WoWExportSearch({ + const result = await WoWExportSearch({ region, ...validatedFormData.data }) + + return json({ + ...(await result.json()), + sortby: validatedFormData.data.sortBy + }) } -type ActionResponseType = {} | { exception: string } | WoWExportResponse +type ActionResponseType = + | {} + | { exception: string } + | (WoWExportResponse & { sortby: string }) const ExportSearch = () => { const result = useActionData() const transistion = useNavigation() const { wowItems } = useTypedSelector((state) => state.user) - const [itemName, setItemName] = useState('') + const [itemName, setItemName] = useState<{ name: string; error: string }>({ + name: '', + error: '' + }) const isSubmitting = transistion.state === 'submitting' - const handleSubmit = ( - event: React.MouseEvent - ) => { - if (isSubmitting) { - event.preventDefault() - } - } - const handleSelect = (value: string) => { - setItemName(value) + setItemName({ error: '', name: value }) } const memoItems = useMemo( @@ -72,16 +79,36 @@ const ExportSearch = () => { [wowItems] ) - const itemId = getItemIDByName(itemName.trim(), wowItems) + const itemId = getItemIDByName(itemName.name.trim(), wowItems) const error = result && 'exception' in result ? result.exception : undefined + + if (result && !Object.keys(result).length) { + return + } + console.log(result) + if (result && 'data' in result && !error) { + return + } + + const handleSubmit = ( + event: React.MouseEvent + ) => { + if (isSubmitting) { + event.preventDefault() + } + if (!itemId) { + setItemName({ ...itemName, error: 'Invalid item selected' }) + } + } + return (
{ name="maxQuantity" type="number" defaultValue={1000} + min={0} /> { name="minPrice" type="number" defaultValue={1000} + min={0} />