diff --git a/src/views/inventory/InventoryMessageHandler.tsx b/src/views/inventory/InventoryMessageHandler.tsx index b56fe53d..0d77e797 100644 --- a/src/views/inventory/InventoryMessageHandler.tsx +++ b/src/views/inventory/InventoryMessageHandler.tsx @@ -1,50 +1,28 @@ import { FurnitureListAddOrUpdateEvent, FurnitureListEvent, FurnitureListInvalidateEvent, FurnitureListItemParser, FurnitureListRemovedEvent, FurniturePostItPlacedEvent } from 'nitro-renderer'; import { FC, useCallback } from 'react'; import { CreateMessageHook } from '../../hooks/messages/message-event'; +import { useInventoryContext } from './context/InventoryContext'; import { InventoryMessageHandlerProps } from './InventoryMessageHandler.types'; -import { FurnitureItem } from './utils/FurnitureItem'; -import { addFurnitureItem, getGroupItemForFurnitureId, mergeFragments, processFragment, removeItemById } from './utils/FurnitureUtilities'; +import { InventoryFurnitureActions } from './reducers/InventoryFurnitureReducer'; +import { mergeFragments } from './utils/FurnitureUtilities'; let furniMsgFragments: Map[] = null; export const InventoryMessageHandler: FC = props => { - const { setNeedsFurniUpdate = null, setGroupItems = null } = props; + const { dispatchFurnitureState = null } = useInventoryContext(); const onFurnitureListAddOrUpdateEvent = useCallback((event: FurnitureListAddOrUpdateEvent) => { const parser = event.getParser(); - setGroupItems(prevValue => - { - const newSet = [ ...prevValue ]; - - for(const item of parser.items) - { - const groupItem = getGroupItemForFurnitureId(newSet, item.itemId); - - if(groupItem) - { - const furniture = groupItem.getItemById(item.itemId); - - if(furniture) - { - furniture.update(item); - - groupItem.hasUnseenItems = true; - } - } - else - { - const furniture = new FurnitureItem(item); - - addFurnitureItem(newSet, furniture, false); - } - } - - return newSet; - }); - }, [ setGroupItems ]); + dispatchFurnitureState({ + type: InventoryFurnitureActions.ADD_OR_UPDATE_FURNITURE, + payload: { + parsers: parser.items + } + }); + }, [ dispatchFurnitureState ]); const onFurnitureListEvent = useCallback((event: FurnitureListEvent) => { @@ -52,41 +30,37 @@ export const InventoryMessageHandler: FC = props = if(!furniMsgFragments) furniMsgFragments = new Array(parser.totalFragments); - const merged = mergeFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments); + const fragment = mergeFragments(parser.fragment, parser.totalFragments, parser.fragmentNumber, furniMsgFragments); - if(!merged) return; + if(!fragment) return; - setGroupItems(prevValue => - { - return processFragment(prevValue, merged); - }); - }, [ setGroupItems ]); + dispatchFurnitureState({ + type: InventoryFurnitureActions.PROCESS_FRAGMENT, + payload: { fragment } + }); + }, [ dispatchFurnitureState ]); const onFurnitureListInvalidateEvent = useCallback((event: FurnitureListInvalidateEvent) => { - setNeedsFurniUpdate(true); - }, [ setNeedsFurniUpdate ]); + dispatchFurnitureState({ + type: InventoryFurnitureActions.SET_NEEDS_UPDATE, + payload: { + flag: true + } + }); + }, [ dispatchFurnitureState ]); const onFurnitureListRemovedEvent = useCallback((event: FurnitureListRemovedEvent) => { const parser = event.getParser(); - setGroupItems(prevValue => - { - const newSet = [ ...prevValue ]; - - const groupItem = removeItemById(parser.itemId, newSet); - - if(groupItem) - { - // set all seen - - return newSet; - } - - return prevValue; - }); - }, [ setGroupItems ]); + dispatchFurnitureState({ + type: InventoryFurnitureActions.REMOVE_FURNITURE, + payload: { + itemId: parser.itemId + } + }); + }, [ dispatchFurnitureState ]); const onFurniturePostItPlacedEvent = useCallback((event: FurniturePostItPlacedEvent) => { diff --git a/src/views/inventory/InventoryMessageHandler.types.ts b/src/views/inventory/InventoryMessageHandler.types.ts index 4b091bd8..e1f43620 100644 --- a/src/views/inventory/InventoryMessageHandler.types.ts +++ b/src/views/inventory/InventoryMessageHandler.types.ts @@ -1,8 +1,3 @@ -import { Dispatch, SetStateAction } from 'react'; -import { GroupItem } from './utils/GroupItem'; - export interface InventoryMessageHandlerProps { - setNeedsFurniUpdate: Dispatch>; - setGroupItems: Dispatch>; } diff --git a/src/views/inventory/InventoryView.scss b/src/views/inventory/InventoryView.scss index 22e4add7..c9552f6f 100644 --- a/src/views/inventory/InventoryView.scss +++ b/src/views/inventory/InventoryView.scss @@ -1,7 +1,7 @@ .nitro-inventory { width: 475px; - height: 300px; - max-height: 300px; + // height: 300px; + // max-height: 300px; } @import './views/InventoryViews'; diff --git a/src/views/inventory/InventoryView.tsx b/src/views/inventory/InventoryView.tsx index 35cf6660..fdf2c722 100644 --- a/src/views/inventory/InventoryView.tsx +++ b/src/views/inventory/InventoryView.tsx @@ -1,15 +1,18 @@ import classNames from 'classnames'; -import { IRoomSession, RoomPreviewer, RoomSessionEvent } from 'nitro-renderer'; -import { FC, useCallback, useEffect, useState } from 'react'; +import { IRoomSession, RoomEngineObjectEvent, RoomEngineObjectPlacedEvent, RoomPreviewer, RoomSessionEvent } from 'nitro-renderer'; +import { FC, useCallback, useEffect, useReducer, useState } from 'react'; import { GetRoomEngine } from '../../api'; import { InventoryEvent } from '../../events'; import { DraggableWindow } from '../../hooks/draggable-window/DraggableWindow'; +import { useRoomEngineEvent } from '../../hooks/events/nitro/room/room-engine-event'; import { useRoomSessionManagerEvent } from '../../hooks/events/nitro/session/room-session-manager-event'; import { useUiEvent } from '../../hooks/events/ui/ui-event'; import { LocalizeText } from '../../utils/LocalizeText'; +import { InventoryContextProvider } from './context/InventoryContext'; import { InventoryMessageHandler } from './InventoryMessageHandler'; import { InventoryTabs, InventoryViewProps } from './InventoryView.types'; -import { GroupItem } from './utils/GroupItem'; +import { initialInventoryFurniture, inventoryFurnitureReducer } from './reducers/InventoryFurnitureReducer'; +import { isObjectMoverRequested, setObjectMoverRequested } from './utils/FurnitureUtilities'; import { InventoryFurnitureView } from './views/furniture/InventoryFurnitureView'; export const InventoryView: FC = props => @@ -18,12 +21,9 @@ export const InventoryView: FC = props => const [ isVisible, setIsVisible ] = useState(false); const [ currentTab, setCurrentTab ] = useState(tabs[0]); - const [ roomSession, setRoomSession ] = useState(null); - const [ needsFurniUpdate, setNeedsFurniUpdate ] = useState(true); - const [ groupItem, setGroupItem ] = useState(null); - const [ groupItems, setGroupItems ] = useState([]); const [ roomPreviewer, setRoomPreviewer ] = useState(null); + const [ furnitureState, dispatchFurnitureState ] = useReducer(inventoryFurnitureReducer, initialInventoryFurniture); const onInventoryEvent = useCallback((event: InventoryEvent) => { @@ -45,6 +45,17 @@ export const InventoryView: FC = props => useUiEvent(InventoryEvent.HIDE_INVENTORY, onInventoryEvent); useUiEvent(InventoryEvent.TOGGLE_INVENTORY, onInventoryEvent); + const onRoomEngineObjectPlacedEvent = useCallback((event: RoomEngineObjectPlacedEvent) => + { + if(!isObjectMoverRequested()) return; + + setObjectMoverRequested(false); + + if(!event._Str_4057) setIsVisible(true); + }, []); + + useRoomEngineEvent(RoomEngineObjectEvent.PLACED, onRoomEngineObjectPlacedEvent); + const onRoomSessionEvent = useCallback((event: RoomSessionEvent) => { switch(event.type) @@ -83,10 +94,8 @@ export const InventoryView: FC = props => } return ( - <> - + + { isVisible &&
@@ -107,16 +116,11 @@ export const InventoryView: FC = props =>
{ (currentTab === InventoryTabs.FURNITURE ) && }
} - + ); } diff --git a/src/views/inventory/context/InventoryContext.tsx b/src/views/inventory/context/InventoryContext.tsx index 9708b887..8621f150 100644 --- a/src/views/inventory/context/InventoryContext.tsx +++ b/src/views/inventory/context/InventoryContext.tsx @@ -2,8 +2,8 @@ import { createContext, FC, useContext } from 'react'; import { IInventoryContext, InventoryContextProps } from './InventoryContext.types'; const InventoryContext = createContext({ - currentTab: null, - setCurrentTab: null, + furnitureState: null, + dispatchFurnitureState: null }); export const InventoryContextProvider: FC = props => diff --git a/src/views/inventory/context/InventoryContext.types.ts b/src/views/inventory/context/InventoryContext.types.ts index 2c1e808e..bad74873 100644 --- a/src/views/inventory/context/InventoryContext.types.ts +++ b/src/views/inventory/context/InventoryContext.types.ts @@ -1,9 +1,10 @@ -import { ProviderProps } from 'react'; +import { Dispatch, ProviderProps } from 'react'; +import { IInventoryFurnitureAction, IInventoryFurnitureState } from '../reducers/InventoryFurnitureReducer'; export interface IInventoryContext { - currentTab: string; - setCurrentTab: (tab: string) => void; + furnitureState: IInventoryFurnitureState; + dispatchFurnitureState: Dispatch; } export interface InventoryContextProps extends ProviderProps diff --git a/src/views/inventory/context/furniture/InventoryFurnitureContext.tsx b/src/views/inventory/context/furniture/InventoryFurnitureContext.tsx deleted file mode 100644 index 9f13c5f5..00000000 --- a/src/views/inventory/context/furniture/InventoryFurnitureContext.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { createContext, FC, useContext } from 'react'; -import { IInventoryFurnitureContext, InventoryFurnitureContextProps } from './InventoryFurnitureContext.types'; - -const InventoryFurnitureContext = createContext({ - setNeedsUpdate: null, - setGroupItems: null -}); - -export const InventoryFurnitureContextProvider: FC = props => -{ - return { props.children } -} - -export const useInventoryFurnitureContext = () => useContext(InventoryFurnitureContext); diff --git a/src/views/inventory/context/furniture/InventoryFurnitureContext.types.ts b/src/views/inventory/context/furniture/InventoryFurnitureContext.types.ts deleted file mode 100644 index ca44e87f..00000000 --- a/src/views/inventory/context/furniture/InventoryFurnitureContext.types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { Dispatch, ProviderProps, SetStateAction } from 'react'; -import { GroupItem } from '../../utils/GroupItem'; - -export interface IInventoryFurnitureContext -{ - setNeedsUpdate: Dispatch>; - setGroupItems: Dispatch>; -} - -export interface InventoryFurnitureContextProps extends ProviderProps -{ - -} diff --git a/src/views/inventory/reducers/InventoryFurnitureReducer.tsx b/src/views/inventory/reducers/InventoryFurnitureReducer.tsx new file mode 100644 index 00000000..dd1f146a --- /dev/null +++ b/src/views/inventory/reducers/InventoryFurnitureReducer.tsx @@ -0,0 +1,137 @@ +import { FurnitureListItemParser } from 'nitro-renderer'; +import { Reducer } from 'react'; +import { FurnitureItem } from '../utils/FurnitureItem'; +import { addFurnitureItem, processFragment, removeItemById } from '../utils/FurnitureUtilities'; +import { GroupItem } from '../utils/GroupItem'; + +export interface IInventoryFurnitureState +{ + needsFurniUpdate: boolean; + groupItem: GroupItem; + groupItems: GroupItem[]; +} + +export interface IInventoryFurnitureAction +{ + type: string; + payload: { + flag?: boolean; + groupItem?: GroupItem; + parsers?: FurnitureListItemParser[]; + itemId?: number; + fragment?: Map; + } +} + +export class InventoryFurnitureActions +{ + public static SET_NEEDS_UPDATE: string = 'IFA_SET_NEEDS_UPDATE'; + public static SET_GROUP_ITEM: string = 'IFA_SET_GROUP_ITEM'; + public static ADD_OR_UPDATE_FURNITURE: string = 'IFA_ADD_OR_UPDATE_FURNITURE'; + public static REMOVE_FURNITURE: string = 'IFA_REMOVE_FURNITURE'; + public static PROCESS_FRAGMENT: string = 'IFA_PROCESS_FRAGMENT'; +} + +export const initialInventoryFurniture: IInventoryFurnitureState = { + needsFurniUpdate: true, + groupItem: null, + groupItems: [] +} + +export const inventoryFurnitureReducer: Reducer = (state, action) => +{ + switch(action.type) + { + case InventoryFurnitureActions.SET_NEEDS_UPDATE: + return { ...state, needsFurniUpdate: (action.payload.flag || false) }; + case InventoryFurnitureActions.SET_GROUP_ITEM: { + let groupItem = (action.payload.groupItem || state.groupItem || null); + + let index = 0; + + if(groupItem) + { + const foundIndex = state.groupItems.indexOf(groupItem); + + if(foundIndex > -1) index = foundIndex; + } + + groupItem = (state.groupItems[index] || null); + + return { ...state, groupItem }; + } + case InventoryFurnitureActions.ADD_OR_UPDATE_FURNITURE: { + const groupItems = [ ...state.groupItems ]; + + for(const item of action.payload.parsers) + { + let i = 0; + let groupItem: GroupItem = null; + + while(i < groupItems.length) + { + const group = groupItems[i]; + + let j = 0; + + while(j < group.items.length) + { + const furniture = group.items[j]; + + if(furniture.id === item.itemId) + { + furniture.update(item); + + const newFurniture = [ ...group.items ]; + + newFurniture[j] = furniture; + + group.items = newFurniture; + + groupItem = group; + + break; + } + + j++ + } + + if(groupItem) break; + + i++; + } + + if(groupItem) + { + groupItem.hasUnseenItems = true; + + groupItems[i] = Object.create(groupItem); + } + else + { + const furniture = new FurnitureItem(item); + + addFurnitureItem(groupItems, furniture, false); + } + } + + return { ...state, groupItems }; + } + case InventoryFurnitureActions.REMOVE_FURNITURE: { + const groupItems = [ ...state.groupItems ]; + + removeItemById(action.payload.itemId, groupItems); + + return { ...state, groupItems }; + } + case InventoryFurnitureActions.PROCESS_FRAGMENT: { + const groupItems = [ ...state.groupItems ]; + + processFragment(groupItems, (action.payload.fragment || null)); + + return { ...state, groupItems }; + } + default: + return state; + } +} diff --git a/src/views/inventory/utils/FurnitureUtilities.ts b/src/views/inventory/utils/FurnitureUtilities.ts index 06ed4ba6..9647e837 100644 --- a/src/views/inventory/utils/FurnitureUtilities.ts +++ b/src/views/inventory/utils/FurnitureUtilities.ts @@ -155,9 +155,7 @@ export function processFragment(set: GroupItem[], fragment: Map = props => { - const { needsFurniUpdate = false, setNeedsFurniUpdate = null, groupItem = null, setGroupItem = null, groupItems = null, roomSession = null, roomPreviewer = null } = props; + const { roomSession = null, roomPreviewer = null } = props; - console.log(props); + const { furnitureState = null, dispatchFurnitureState = null } = useInventoryContext(); + const { needsFurniUpdate = false, groupItem = null, groupItems = [] } = furnitureState; useEffect(() => { if(needsFurniUpdate) { - setNeedsFurniUpdate(false); + dispatchFurnitureState({ + type: InventoryFurnitureActions.SET_NEEDS_UPDATE, + payload: { + flag: false + } + }); SendMessageHook(new FurnitureListComposer()); } else { - setGroupItem(prevValue => - { - if(!groupItems || !groupItems.length) return null; - - let index = 0; - - if(prevValue) - { - const foundIndex = groupItems.indexOf(prevValue); - - if(foundIndex > -1) index = foundIndex; - } - - return groupItems[index]; - }); + dispatchFurnitureState({ + type: InventoryFurnitureActions.SET_GROUP_ITEM, + payload: { + groupItem: null + } + }); } - }, [ needsFurniUpdate, setNeedsFurniUpdate, groupItems, setGroupItem ]); + }, [ needsFurniUpdate, groupItems, dispatchFurnitureState ]); useEffect(() => { @@ -97,18 +97,13 @@ export const InventoryFurnitureView: FC = props => return (
-
- { groupItems && groupItems.length && groupItems.map((item, index) => - { - return - }) - } -
+ +
- - { groupItem &&
-

{ groupItem.name }

+ + { groupItem &&
+

{ groupItem.name }

{ !!roomSession && }
}
diff --git a/src/views/inventory/views/furniture/InventoryFurnitureView.types.ts b/src/views/inventory/views/furniture/InventoryFurnitureView.types.ts index 9b033363..12d8cfaf 100644 --- a/src/views/inventory/views/furniture/InventoryFurnitureView.types.ts +++ b/src/views/inventory/views/furniture/InventoryFurnitureView.types.ts @@ -1,14 +1,7 @@ import { IRoomSession, RoomPreviewer } from 'nitro-renderer'; -import { Dispatch, SetStateAction } from 'react'; -import { GroupItem } from '../../utils/GroupItem'; export interface InventoryFurnitureViewProps { - needsFurniUpdate: boolean; - setNeedsFurniUpdate: Dispatch>; - groupItem: GroupItem; - setGroupItem: Dispatch>; - groupItems: GroupItem[]; roomSession: IRoomSession; roomPreviewer: RoomPreviewer; } diff --git a/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.scss b/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.scss index 66091f74..46f937a1 100644 --- a/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.scss +++ b/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.scss @@ -1,19 +1,25 @@ -.inventory-furniture-item { - background-position: center; - background-repeat: no-repeat; - height: 50px; - max-height: 50px; - border-color: $muted !important; - background-color: #CDD3D9; +.inventory-furniture-item-container { + height: 48px; + max-height: 48px; - &.active { - border-color: $white !important; - background-color: #ECECEC; - } - - .badge { - top: 3px; - right: 3px; - font-size: 10px; + .inventory-furniture-item { + width: 100%; + height: 100%; + background-position: center; + background-repeat: no-repeat; + border-color: $muted !important; + background-color: #CDD3D9; + overflow: hidden; + + &.active { + border-color: $white !important; + background-color: #ECECEC; + } + + .badge { + top: 2px; + right: 2px; + font-size: 8px; + } } } diff --git a/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.tsx b/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.tsx index 97eeecd1..8d5399a6 100644 --- a/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.tsx +++ b/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.tsx @@ -1,16 +1,48 @@ -import { FC } from 'react'; +import { MouseEventType } from 'nitro-renderer'; +import { FC, MouseEvent, useCallback, useState } from 'react'; +import { useInventoryContext } from '../../../context/InventoryContext'; +import { InventoryFurnitureActions } from '../../../reducers/InventoryFurnitureReducer'; +import { attemptItemPlacement } from '../../../utils/FurnitureUtilities'; import { InventoryFurnitureItemViewProps } from './InventoryFurnitureItemView.types'; export const InventoryFurnitureItemView: FC = props => { - const { groupItem = null, isActive = false, setGroupItem = null } = props; + const { groupItem } = props; + const { furnitureState, dispatchFurnitureState } = useInventoryContext(); + const [ isMouseDown, setMouseDown ] = useState(false); + const isActive = (furnitureState.groupItem === groupItem); + + const onMouseEvent = useCallback((event: MouseEvent) => + { + switch(event.type) + { + case MouseEventType.MOUSE_DOWN: + dispatchFurnitureState({ + type: InventoryFurnitureActions.SET_GROUP_ITEM, + payload: { + groupItem + } + }); + + setMouseDown(true); + return; + case MouseEventType.MOUSE_UP: + setMouseDown(false); + return; + case MouseEventType.ROLL_OUT: + if(!isMouseDown || !isActive) return; + + attemptItemPlacement(groupItem); + return; + } + }, [ isActive, isMouseDown, groupItem, dispatchFurnitureState ]); const imageUrl = `url(${ groupItem.iconUrl })`; return ( -
-
setGroupItem(groupItem) }> - { groupItem.getUnlockedCount() } +
+
+ { groupItem.getUnlockedCount() }
); diff --git a/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.types.ts b/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.types.ts index 167edede..2e960f23 100644 --- a/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.types.ts +++ b/src/views/inventory/views/furniture/item/InventoryFurnitureItemView.types.ts @@ -1,9 +1,6 @@ -import { Dispatch, SetStateAction } from 'react'; import { GroupItem } from '../../../utils/GroupItem'; export interface InventoryFurnitureItemViewProps { groupItem: GroupItem; - isActive: boolean; - setGroupItem: Dispatch>; } diff --git a/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.scss b/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.scss new file mode 100644 index 00000000..eb24c55c --- /dev/null +++ b/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.scss @@ -0,0 +1,5 @@ +.item-container { + height: 208px; + max-height: 208px; + overflow-y: auto; +} diff --git a/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.tsx b/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.tsx new file mode 100644 index 00000000..6f1547fe --- /dev/null +++ b/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.tsx @@ -0,0 +1,18 @@ +import { FC } from 'react'; +import { InventoryFurnitureItemView } from '../item/InventoryFurnitureItemView'; +import { InventoryFurnitureResultsViewProps } from './InventoryFurnitureResultsView.types'; + +export const InventoryFurnitureResultsView: FC = props => +{ + const { groupItems = [] } = props; + + return ( +
+ { groupItems && groupItems.length && groupItems.map((item, index) => + { + return + }) + } +
+ ); +} diff --git a/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.types.ts b/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.types.ts new file mode 100644 index 00000000..4461e531 --- /dev/null +++ b/src/views/inventory/views/furniture/results/InventoryFurnitureResultsView.types.ts @@ -0,0 +1,6 @@ +import { GroupItem } from '../../../utils/GroupItem'; + +export interface InventoryFurnitureResultsViewProps +{ + groupItems: GroupItem[]; +} diff --git a/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.scss b/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.scss new file mode 100644 index 00000000..e69de29b diff --git a/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.tsx b/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.tsx new file mode 100644 index 00000000..da3e826d --- /dev/null +++ b/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.tsx @@ -0,0 +1,33 @@ +import { ChangeEvent, FC, FormEvent, useEffect, useState } from 'react'; +import { InventoryFurnitureSearchViewProps } from './InventoryFurnitureSearchView.types'; + +export const InventoryFurnitureSearchView: FC = props => +{ + const [ searchValue, setSearchValue ] = useState(''); + + function onChange(event: ChangeEvent): void + { + setSearchValue(event.target.value); + } + + function handleSubmit(event: FormEvent): void + { + event.preventDefault(); + } + + useEffect(() => + { + + }, [ searchValue ]); + + return ( +
+
+ +
+
+ +
+
+ ); +} diff --git a/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.types.ts b/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.types.ts new file mode 100644 index 00000000..0d9d7f4a --- /dev/null +++ b/src/views/inventory/views/furniture/search/InventoryFurnitureSearchView.types.ts @@ -0,0 +1,4 @@ +export interface InventoryFurnitureSearchViewProps +{ + +}