basic selector functionality
This commit is contained in:
parent
bac9dfb65d
commit
ff8ebc09e1
@ -5,9 +5,29 @@ import { useAppDispatch, useAppSelector } from 'src/redux/hooks';
|
||||
import { addWidget, getWidgetById, getWidgets } from 'src/redux/slices/cmSlice';
|
||||
import { ONE_SECOND_IN_MS } from 'src/utils/constants';
|
||||
import type { Widget } from 'src/types/modalities';
|
||||
import useSelector from 'src/prototype/useSelector';
|
||||
import type { MissileToOwnshipDetected } from 'src/types/schema-types';
|
||||
|
||||
const dummyMessage: MissileToOwnshipDetected = {
|
||||
id: 1234,
|
||||
priority: 10,
|
||||
kind: 'MissileToOwnshipDetected',
|
||||
data: {
|
||||
missileLocation: { lat: 0, lng: 0 },
|
||||
survivability: 0,
|
||||
detectedByAca: undefined,
|
||||
acaAttackWeapon: undefined,
|
||||
choiceWeight: 0,
|
||||
},
|
||||
};
|
||||
|
||||
const Prototype = () => {
|
||||
const dispatch = useAppDispatch();
|
||||
const { message, possibleModalities } = useSelector({
|
||||
message: dummyMessage,
|
||||
});
|
||||
|
||||
console.log('message:', message, 'possibleModalities:', possibleModalities);
|
||||
|
||||
// demonstration of using a selector to access redux state
|
||||
const widgets = useAppSelector(getWidgets);
|
||||
@ -19,12 +39,13 @@ const Prototype = () => {
|
||||
|
||||
// demonstration of using dispatch function to update redux state
|
||||
const handleAddWidget = () => {
|
||||
const expirationTime = new Date();
|
||||
console.log(expirationTime);
|
||||
expirationTime.setSeconds(
|
||||
expirationTime.getSeconds() + (Math.floor(Math.random() * 10) + 5),
|
||||
); //set the time to expire to a time between 5 and 15 seconds
|
||||
console.log(expirationTime);
|
||||
|
||||
const expirationTime = new Date()
|
||||
console.log(expirationTime)
|
||||
expirationTime.setSeconds(expirationTime.getSeconds()+(Math.floor(Math.random() * 10)+5)) //set the time to expire to a time between 5 and 15 seconds
|
||||
console.log(expirationTime)
|
||||
|
||||
// construct dummy widget
|
||||
const newWidget: Widget = {
|
||||
id: uuid(),
|
||||
@ -44,7 +65,7 @@ const Prototype = () => {
|
||||
|
||||
useEffect(() => {
|
||||
// use setInterval to run monitor every second (1000ms)
|
||||
const interval = setInterval(() => monitor({widgets}), ONE_SECOND_IN_MS);
|
||||
const interval = setInterval(() => monitor({ widgets }), ONE_SECOND_IN_MS);
|
||||
// clear interval when component unmounts to prevent memory leak
|
||||
return () => clearInterval(interval);
|
||||
}, []);
|
||||
|
@ -1,4 +1,6 @@
|
||||
import type { Message } from 'src/types/schema-types';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import type { Element } from 'src/types/modalities';
|
||||
|
||||
type SelectorProps = {
|
||||
message: Message;
|
||||
@ -10,7 +12,55 @@ type SelectorProps = {
|
||||
* @returns ???
|
||||
*/
|
||||
const useSelector = ({ message }: SelectorProps) => {
|
||||
console.log('useSelector');
|
||||
const possibleModalities: Element[] = [];
|
||||
|
||||
// simulation LPD
|
||||
if (message.kind === 'RequestApprovalToAttack') {
|
||||
possibleModalities.push({
|
||||
id: uuid(),
|
||||
expiration: new Date().toISOString(),
|
||||
modality: 'visual',
|
||||
type: 'button',
|
||||
});
|
||||
} else if (message.kind === 'MissileToOwnshipDetected') {
|
||||
possibleModalities.push({
|
||||
id: uuid(),
|
||||
expiration: new Date().toISOString(),
|
||||
modality: 'auditory',
|
||||
type: 'audio',
|
||||
});
|
||||
possibleModalities.push({
|
||||
id: uuid(),
|
||||
expiration: new Date().toISOString(),
|
||||
modality: 'visual',
|
||||
type: 'icon',
|
||||
});
|
||||
} else if (message.kind === 'AcaFuelLow' || message.kind === 'AcaDefect') {
|
||||
possibleModalities.push({
|
||||
id: uuid(),
|
||||
expiration: new Date().toISOString(),
|
||||
modality: 'visual',
|
||||
type: 'table',
|
||||
});
|
||||
possibleModalities.push({
|
||||
id: uuid(),
|
||||
expiration: new Date().toISOString(),
|
||||
modality: 'visual',
|
||||
type: 'text',
|
||||
});
|
||||
} else if (message.kind === 'AcaHeadingToBase') {
|
||||
possibleModalities.push({
|
||||
id: uuid(),
|
||||
expiration: new Date().toISOString(),
|
||||
modality: 'visual',
|
||||
type: 'text',
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
message,
|
||||
possibleModalities,
|
||||
};
|
||||
};
|
||||
|
||||
export default useSelector;
|
||||
|
@ -11,7 +11,7 @@ export type Element = {
|
||||
expiration: string;
|
||||
id: string;
|
||||
modality: Modality;
|
||||
type: 'table' | 'button' | 'text' | 'image' | 'audio';
|
||||
type: 'table' | 'button' | 'text' | 'image' | 'audio' | 'icon';
|
||||
};
|
||||
|
||||
export type Widget = {
|
||||
|
Loading…
Reference in New Issue
Block a user