make elements a local variable in LPDs

This commit is contained in:
bedlam343 2024-05-16 15:57:29 -07:00
parent 3758425463
commit a548ea3571
7 changed files with 446 additions and 414 deletions

View File

@ -75,23 +75,23 @@ const Prototype = () => {
dispatch(addMessage(currentMessage)); dispatch(addMessage(currentMessage));
//console.log('hjere!', messages) //console.log('hjere!', messages)
reactToMessage({dispatch, currentMessage, stressLevel}); reactToMessage({ dispatch, currentMessage, stressLevel });
}, [messages]); }, [messages]);
useEffect(() => { // useEffect(() => {
if(stressLevel != 0){ //don't run at start // if(stressLevel != 0){ //don't run at start
console.log('stress level', stressLevel) // console.log('stress level', stressLevel)
let allWidgetsInNewStressLPD: Widget[] = selector({stressLevel: stressLevel}) // let allWidgetsInNewStressLPD: Widget[] = selector({stressLevel: stressLevel})
console.log('allwiidgets',allWidgetsInNewStressLPD) // console.log('allwiidgets',allWidgetsInNewStressLPD)
let allWidgetsInNewStressLPDIds: string[] = allWidgetsInNewStressLPD.map(a => a.id); //get all widget ids from new stress level LPD and initial LPD // let allWidgetsInNewStressLPDIds: string[] = allWidgetsInNewStressLPD.map(a => a.id); //get all widget ids from new stress level LPD and initial LPD
stressChangeHandler({dispatch:dispatch, allWidgetIds:Object.keys(widgets), allMessages: messages, allWidgetsInNewStressLPDIds: allWidgetsInNewStressLPDIds, stressLevel:stressLevel}) // stressChangeHandler({dispatch:dispatch, allWidgetIds:Object.keys(widgets), allMessages: messages, allWidgetsInNewStressLPDIds: allWidgetsInNewStressLPDIds, stressLevel:stressLevel})
} // }
}, [currentStressLevel]); // }, [currentStressLevel]);
useEffect(() => { // useEffect(() => {
dispatch(setStressLevel(Math.floor(stressLevel * 3))); // dispatch(setStressLevel(Math.floor(stressLevel * 3)));
}, [stressLevel]); // }, [stressLevel]);
return <Home />; return <Home />;
}; };

View File

@ -6,7 +6,7 @@ import type {
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import lpdHelper from 'src/utils/lpdHelper'; import lpdHelper from 'src/utils/lpdHelper';
import DANGER_ICON from 'src/assets/icons/danger.svg'; import DANGER_ICON from 'src/assets/icons/danger.svg';
import { elements } from './lowLPD'; import type { Element } from 'src/types/element';
import type { Widget } from 'src/types/widget'; import type { Widget } from 'src/types/widget';
import type { WidgetCluster } from 'src/types/support-types'; import type { WidgetCluster } from 'src/types/support-types';
@ -14,9 +14,17 @@ import type { WidgetCluster } from 'src/types/support-types';
const requestApprovalToAttackMessageHigh = ( const requestApprovalToAttackMessageHigh = (
message: RequestApprovalToAttack, message: RequestApprovalToAttack,
) => { ) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateRequestApprovalElement( lpdHelper.generateRequestApprovalElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 30, 30, message.priority, 'list'), lpdHelper.generateBaseElement(
uuid(),
'visual',
30,
30,
message.priority,
'list',
),
message, message,
lpdHelper.generateIconElement( lpdHelper.generateIconElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 80, 80), lpdHelper.generateBaseElement(uuid(), 'visual', 80, 80),
@ -34,32 +42,30 @@ const requestApprovalToAttackMessageHigh = (
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 100,
'tinder', 100,
100, 300,
100, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', false,
false, 1,
false, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaFuelLowMessageHigh = (message: Message) => { const acaFuelLowMessageHigh = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTableElement( lpdHelper.generateTableElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -80,34 +86,32 @@ const acaFuelLowMessageHigh = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', false,
false, 1,
false, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const missileToOwnshipDetectedMessageHigh = ( const missileToOwnshipDetectedMessageHigh = (
message: MissileToOwnshipDetected, message: MissileToOwnshipDetected,
) => { ) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateMissileIncomingElement( lpdHelper.generateMissileIncomingElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -127,32 +131,30 @@ const missileToOwnshipDetectedMessageHigh = (
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 100,
'tinder', 100,
100, 300,
100, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaDefectMessageHigh = (message: Message) => { const acaDefectMessageHigh = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTableElement( lpdHelper.generateTableElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -173,32 +175,30 @@ const acaDefectMessageHigh = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'vehicle',
'list', 500,
'vehicle', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaHeadingToBaseMessageHigh = (message: Message) => { const acaHeadingToBaseMessageHigh = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTextElement( lpdHelper.generateTextElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -214,36 +214,31 @@ const acaHeadingToBaseMessageHigh = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1,
[...elements],
),
), ),
], ),
), ]),
] ],
}; };
}; };
const generateCluster = ( const generateCluster = (widgets: Widget[]): WidgetCluster => ({
widgets: Widget[],
): WidgetCluster => ({
widgets: widgets, widgets: widgets,
}) });
// Map each message type to its corresponding LPD function // Map each message type to its corresponding LPD function
const highLPDMessageFunctions: any = { const highLPDMessageFunctions: any = {
@ -255,31 +250,38 @@ const highLPDMessageFunctions: any = {
}; };
const highLPD = (message: Message) => { const highLPD = (message: Message) => {
if(message.priority != -1) //if the message is a real message, return the clusters if (message.priority != -1)
//if the message is a real message, return the clusters
return highLPDMessageFunctions[message.kind](message); return highLPDMessageFunctions[message.kind](message);
//if we get this far, we can return all widgets in this LPD //if we get this far, we can return all widgets in this LPD
const tempMessage = <RequestApprovalToAttack>({ //make a dummy widget to put into LPD function const tempMessage = <RequestApprovalToAttack>{
//make a dummy widget to put into LPD function
priority: 2, priority: 2,
}); };
const messageKinds = [ //all message kinds, so we can get all widgets const messageKinds = [
//all message kinds, so we can get all widgets
'RequestApprovalToAttack', 'RequestApprovalToAttack',
'AcaFuelLow', 'AcaFuelLow',
'AcaDefect', 'AcaDefect',
'AcaHeadingToBase', 'AcaHeadingToBase',
'MissileToOwnshipDetected' 'MissileToOwnshipDetected',
]; ];
//get all widgets as list of widgets instead of list of clusters //get all widgets as list of widgets instead of list of clusters
let allPossibleWidgets: any = []; let allPossibleWidgets: any = [];
messageKinds.forEach((kind) => { //for each message kind messageKinds.forEach((kind) => {
highLPDMessageFunctions[kind](tempMessage).possibleClusters.forEach((cluster: WidgetCluster) => { //for each cluster in kind //for each message kind
cluster.widgets.forEach((widget: Widget) => { //for eahc widget in widget cluster highLPDMessageFunctions[kind](tempMessage).possibleClusters.forEach(
allPossibleWidgets.push(widget); //add the widget (cluster: WidgetCluster) => {
}); //for each cluster in kind
}); cluster.widgets.forEach((widget: Widget) => {
//for eahc widget in widget cluster
allPossibleWidgets.push(widget); //add the widget
});
},
);
}); });
return allPossibleWidgets; return allPossibleWidgets;
}; };

View File

@ -1,4 +1,8 @@
import type { Message, MissileToOwnshipDetected, RequestApprovalToAttack } from 'src/types/schema-types'; import type {
Message,
MissileToOwnshipDetected,
RequestApprovalToAttack,
} from 'src/types/schema-types';
import lpdHelper from 'src/utils/lpdHelper'; import lpdHelper from 'src/utils/lpdHelper';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import type { Element } from 'src/types/element'; import type { Element } from 'src/types/element';
@ -6,10 +10,11 @@ import DANGER_ICON from 'src/assets/icons/danger.svg';
import type { Widget } from 'src/types/widget'; import type { Widget } from 'src/types/widget';
import type { WidgetCluster } from 'src/types/support-types'; import type { WidgetCluster } from 'src/types/support-types';
export const elements: Element[] = [];
// Functions to create widgets, elements, and sections for each message type // Functions to create widgets, elements, and sections for each message type
const requestApprovalToAttackMessageLow = (message: RequestApprovalToAttack) => { const requestApprovalToAttackMessageLow = (
message: RequestApprovalToAttack,
) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateRequestApprovalElement( lpdHelper.generateRequestApprovalElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 30, 30, message.priority), lpdHelper.generateBaseElement(uuid(), 'visual', 30, 30, message.priority),
@ -30,35 +35,39 @@ const requestApprovalToAttackMessageLow = (message: RequestApprovalToAttack) =>
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 100,
'tinder', 100,
100, 300,
100, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', false,
false, 1,
false, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaFuelLowMessageLow = (message: Message) => { const acaFuelLowMessageLow = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTableElement( lpdHelper.generateTableElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, message.priority), lpdHelper.generateBaseElement(
uuid(),
'visual',
50,
200,
message.priority,
),
2, 2,
2, 2,
[ [
@ -69,32 +78,32 @@ const acaFuelLowMessageLow = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', false,
false, 1,
false, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const missileToOwnshipDetectedMessageLow = (message: MissileToOwnshipDetected) => { const missileToOwnshipDetectedMessageLow = (
message: MissileToOwnshipDetected,
) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateMissileIncomingElement( lpdHelper.generateMissileIncomingElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -113,35 +122,39 @@ const missileToOwnshipDetectedMessageLow = (message: MissileToOwnshipDetected) =
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 100,
'tinder', 100,
100, 300,
100, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaDefectMessageLow = (message: Message) => { const acaDefectMessageLow = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTableElement( lpdHelper.generateTableElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 50, 200, message.priority), lpdHelper.generateBaseElement(
uuid(),
'visual',
50,
200,
message.priority,
),
2, 2,
2, 2,
[ [
@ -152,70 +165,69 @@ const acaDefectMessageLow = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaHeadingToBaseMessageLow = (message: Message) => { const acaHeadingToBaseMessageLow = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTextElement( lpdHelper.generateTextElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 30, 200, message.priority), lpdHelper.generateBaseElement(
uuid(),
'visual',
30,
200,
message.priority,
),
'Aircraft heading to base', 'Aircraft heading to base',
), ),
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
)
]
}; };
}; };
const generateCluster = ( const generateCluster = (widgets: Widget[]): WidgetCluster => ({
widgets: Widget[],
): WidgetCluster => ({
widgets: widgets, widgets: widgets,
}) });
// Map each message type to its corresponding LPD function // Map each message type to its corresponding LPD function
const lowLPDMessageFunctions: any = { const lowLPDMessageFunctions: any = {
@ -227,33 +239,39 @@ const lowLPDMessageFunctions: any = {
}; };
const lowLPD = (message: Message) => { const lowLPD = (message: Message) => {
if(message.priority != -1) //if the message is a real message, return the clusters if (message.priority != -1)
//if the message is a real message, return the clusters
return lowLPDMessageFunctions[message.kind](message); return lowLPDMessageFunctions[message.kind](message);
//if we get this far, we can return all widgets in this LPD //if we get this far, we can return all widgets in this LPD
const tempMessage = <RequestApprovalToAttack>({ //make a dummy widget to put into LPD function const tempMessage = <RequestApprovalToAttack>{
//make a dummy widget to put into LPD function
priority: 2, priority: 2,
}); };
const messageKinds = [ //all message kinds, so we can get all widgets const messageKinds = [
//all message kinds, so we can get all widgets
'RequestApprovalToAttack', 'RequestApprovalToAttack',
'AcaFuelLow', 'AcaFuelLow',
'AcaDefect', 'AcaDefect',
'AcaHeadingToBase', 'AcaHeadingToBase',
'MissileToOwnshipDetected' 'MissileToOwnshipDetected',
]; ];
//get all widgets as list of widgets instead of list of clusters //get all widgets as list of widgets instead of list of clusters
let allPossibleWidgets: any = []; let allPossibleWidgets: any = [];
messageKinds.forEach((kind) => { //for each message kind messageKinds.forEach((kind) => {
lowLPDMessageFunctions[kind](tempMessage).possibleClusters.forEach((cluster: WidgetCluster) => { //for each cluster in kind //for each message kind
cluster.widgets.forEach((widget: Widget) => { //for eahc widget in widget cluster lowLPDMessageFunctions[kind](tempMessage).possibleClusters.forEach(
allPossibleWidgets.push(widget); //add the widget (cluster: WidgetCluster) => {
}); //for each cluster in kind
}); cluster.widgets.forEach((widget: Widget) => {
//for eahc widget in widget cluster
allPossibleWidgets.push(widget); //add the widget
});
},
);
}); });
return allPossibleWidgets; return allPossibleWidgets;
}; };
export default lowLPD; export default lowLPD;

View File

@ -6,14 +6,15 @@ import type {
import lpdHelper from 'src/utils/lpdHelper'; import lpdHelper from 'src/utils/lpdHelper';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import DANGER_ICON from 'src/assets/icons/danger.svg'; import DANGER_ICON from 'src/assets/icons/danger.svg';
import { elements } from './lowLPD';
import { type Widget } from 'src/types/widget'; import { type Widget } from 'src/types/widget';
import type { WidgetCluster } from 'src/types/support-types'; import type { WidgetCluster } from 'src/types/support-types';
import type { Element } from 'src/types/element';
// Functions to create widgets, elements, and sections for each message type // Functions to create widgets, elements, and sections for each message type
const requestApprovalToAttackMessageMedium = ( const requestApprovalToAttackMessageMedium = (
message: RequestApprovalToAttack, message: RequestApprovalToAttack,
) => { ) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateRequestApprovalElement( lpdHelper.generateRequestApprovalElement(
lpdHelper.generateBaseElement(uuid(), 'visual', 30, 30, message.priority), lpdHelper.generateBaseElement(uuid(), 'visual', 30, 30, message.priority),
@ -34,32 +35,30 @@ const requestApprovalToAttackMessageMedium = (
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 100,
'tinder', 100,
100, 300,
100, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', false,
false, 1,
false, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaFuelLowMessageMedium = (message: Message) => { const acaFuelLowMessageMedium = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTableElement( lpdHelper.generateTableElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -79,34 +78,32 @@ const acaFuelLowMessageMedium = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', false,
false, 1,
false, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const missileToOwnshipDetectedMessageMedium = ( const missileToOwnshipDetectedMessageMedium = (
message: MissileToOwnshipDetected, message: MissileToOwnshipDetected,
) => { ) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateMissileIncomingElement( lpdHelper.generateMissileIncomingElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -125,32 +122,30 @@ const missileToOwnshipDetectedMessageMedium = (
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 100,
'tinder', 100,
100, 300,
100, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaDefectMessageMedium = (message: Message) => { const acaDefectMessageMedium = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTableElement( lpdHelper.generateTableElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -170,32 +165,30 @@ const acaDefectMessageMedium = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const acaHeadingToBaseMessageMedium = (message: Message) => { const acaHeadingToBaseMessageMedium = (message: Message) => {
const elements: Element[] = [];
elements.push( elements.push(
lpdHelper.generateTextElement( lpdHelper.generateTextElement(
lpdHelper.generateBaseElement( lpdHelper.generateBaseElement(
@ -210,37 +203,31 @@ const acaHeadingToBaseMessageMedium = (message: Message) => {
); );
return { return {
sections: [], sections: [],
possibleClusters: possibleClusters: [
[ generateCluster([
generateCluster( lpdHelper.generateListWidget(
[ lpdHelper.generateBaseWidget(
lpdHelper.generateListWidget( 'list',
lpdHelper.generateBaseWidget( 'tinder',
'list', 500,
'tinder', 500,
500, 300,
500, 800,
300, '/pearce-screen',
800, false,
'/pearce-screen', true,
false, 1,
true, [...elements],
1, ),
[...elements],
), ),
), ]),
], ],
),
]
}; };
}; };
const generateCluster = (widgets: Widget[]): WidgetCluster => ({
const generateCluster = (
widgets: Widget[],
): WidgetCluster => ({
widgets: widgets, widgets: widgets,
}) });
// Map each message type to its corresponding LPD function // Map each message type to its corresponding LPD function
const mediumLPDMessageFunctions: any = { const mediumLPDMessageFunctions: any = {
@ -252,14 +239,17 @@ const mediumLPDMessageFunctions: any = {
}; };
const mediumLPD = (message: Message) => { const mediumLPD = (message: Message) => {
if (message.priority != -1) //if the message is a real message, return the clusters if (message.priority != -1)
//if the message is a real message, return the clusters
return mediumLPDMessageFunctions[message.kind](message); return mediumLPDMessageFunctions[message.kind](message);
//if we get this far, we can return all widgets in this LPD //if we get this far, we can return all widgets in this LPD
const tempMessage = <RequestApprovalToAttack>{ //make a dummy widget to put into LPD function const tempMessage = <RequestApprovalToAttack>{
//make a dummy widget to put into LPD function
priority: 2, priority: 2,
}; };
const messageKinds = [ //all message kinds, so we can get all widgets const messageKinds = [
//all message kinds, so we can get all widgets
'RequestApprovalToAttack', 'RequestApprovalToAttack',
'AcaFuelLow', 'AcaFuelLow',
'AcaDefect', 'AcaDefect',
@ -269,12 +259,17 @@ const mediumLPD = (message: Message) => {
//get all widgets as list of widgets instead of list of clusters //get all widgets as list of widgets instead of list of clusters
let allPossibleWidgets: any = []; let allPossibleWidgets: any = [];
messageKinds.forEach((kind) => { //for each message kind messageKinds.forEach((kind) => {
mediumLPDMessageFunctions[kind](tempMessage).possibleClusters.forEach((cluster: WidgetCluster) => { //for each cluster in kind //for each message kind
cluster.widgets.forEach((widget: Widget) => {//for eahc widget in widget cluster mediumLPDMessageFunctions[kind](tempMessage).possibleClusters.forEach(
allPossibleWidgets.push(widget); //add the widget (cluster: WidgetCluster) => {
}); //for each cluster in kind
}); cluster.widgets.forEach((widget: Widget) => {
//for eahc widget in widget cluster
allPossibleWidgets.push(widget); //add the widget
});
},
);
}); });
return allPossibleWidgets; return allPossibleWidgets;
}; };

View File

@ -12,10 +12,10 @@ import restrainer from './restrainer';
import type { Widget } from 'src/types/widget'; import type { Widget } from 'src/types/widget';
type ReactToMessageProps = { type ReactToMessageProps = {
// define expected input here and it's type (number, string, etc.) // define expected input here and it's type (number, string, etc.)
dispatch: AppDispatch; dispatch: AppDispatch;
currentMessage: Message; currentMessage: Message;
stressLevel: number; stressLevel: number;
}; };
/** /**
@ -23,24 +23,24 @@ type ReactToMessageProps = {
* @param ??? * @param ???
* @returns ??? * @returns ???
*/ */
const reactToMessage = ({ const reactToMessage = ({
dispatch, dispatch,
currentMessage, currentMessage,
stressLevel, stressLevel,
}: ReactToMessageProps) => { }: ReactToMessageProps) => {
const sections = store.getState().minimap.sections; const sections = store.getState().minimap.sections;
const widgets = store.getState().minimap.widgets; const widgets = store.getState().minimap.widgets;
const { possibleClusters:possibleWidgetClusters } = selector({ const { possibleClusters: possibleWidgetClusters } = selector({
message: currentMessage, message: currentMessage,
stressLevel, stressLevel,
}); });
let resolved = false; let resolved = false;
while(!resolved){ //repeat ntil choosing a cluster has resolved while (!resolved) {
//repeat ntil choosing a cluster has resolved
//console.log('running through assimilator...'); //console.log('running through assimilator...');
const { widgetClusterToDeploy, index} = assimilator({ const { widgetClusterToDeploy, index } = assimilator({
// find if there is room for us to put the widget down (returns null if there is not room) // find if there is room for us to put the widget down (returns null if there is not room)
possibleWidgetClusters: possibleWidgetClusters, possibleWidgetClusters: possibleWidgetClusters,
sections, sections,
@ -48,8 +48,7 @@ const reactToMessage = ({
message: currentMessage, message: currentMessage,
}); });
if(index == -1) if (index == -1) resolved = true;
resolved = true;
//check restrainer with all new widgets //check restrainer with all new widgets
//if cluster is bad then go back to assim //if cluster is bad then go back to assim
@ -58,19 +57,23 @@ const reactToMessage = ({
//get all widgets that are new widgets in candidate cluster //get all widgets that are new widgets in candidate cluster
const newWidgets: Widget[] = []; const newWidgets: Widget[] = [];
widgetClusterToDeploy.widgets.forEach((widget, widgetIndex) => { widgetClusterToDeploy.widgets.forEach((widget, widgetIndex) => {
if(widgetClusterToDeploy.actions![widgetIndex] === 'newWidget'){ //if this widget is a new widget, add it to list if (widgetClusterToDeploy.actions![widgetIndex] === 'newWidget') {
newWidgets.push(widget) //if this widget is a new widget, add it to list
newWidgets.push(widget);
} }
}); });
if(index != -1 && restrainer({widgetsToDeploy: newWidgets})){ //if the assim chose a cluster and the restrainer is okoay with the new widgets if (index != -1 && restrainer({ widgetsToDeploy: newWidgets })) {
//if the assim chose a cluster and the restrainer is okoay with the new widgets
resolved = true; resolved = true;
widgetClusterToDeploy.widgets.forEach((widget, widgetIndex) => { widgetClusterToDeploy.widgets.forEach((widget, widgetIndex) => {
const widgetToDeploy = widget; const widgetToDeploy = widget;
const sectionID = widgetClusterToDeploy.sectionIds![widgetIndex] const sectionID = widgetClusterToDeploy.sectionIds![widgetIndex];
const action = widgetClusterToDeploy.actions![widgetIndex] const action = widgetClusterToDeploy.actions![widgetIndex];
console.log('widgetToDeploy:', widgetToDeploy);
if (action !== 'newWidget') { if (action !== 'newWidget') {
//we should do something other than //we should do something other than
switch (action) { switch (action) {
@ -84,7 +87,7 @@ const reactToMessage = ({
dispatch( dispatch(
addElementToWidget( addElementToWidget(
widgetToDeploy.id, widgetToDeploy.id,
widgetToDeploy.elements[0], //<- This should not be able to happen, why are we choosing one element if multiple need to be placed -Tom widgetToDeploy.elements, //<- This should not be able to happen, why are we choosing one element if multiple need to be placed -Tom
), ),
); );
break; break;
@ -93,16 +96,15 @@ const reactToMessage = ({
break; break;
} }
} else if (widgetToDeploy) { } else if (widgetToDeploy) {
// restrainer deems that the widget CAN be deployed
// dispatch action to add new widget
// restrainer deems that the widget CAN be deployed dispatch(addWidget(widgetToDeploy));
dispatch(addWidgetToSection(sectionID));
// dispatch action to add new widget
dispatch(addWidget(widgetToDeploy));
dispatch(addWidgetToSection(sectionID));
} }
}); });
} else { //the restrainer said no, so delete the chosen cluster and try again } else {
//the restrainer said no, so delete the chosen cluster and try again
possibleWidgetClusters.splice(index, 1); possibleWidgetClusters.splice(index, 1);
} }
} }

View File

@ -23,19 +23,23 @@ const selector = ({ message, stressLevel }: SelectorProps = {}) => {
if (!message && !stressLevel) { if (!message && !stressLevel) {
// If no message and no stress provided, return the initial LPD // If no message and no stress provided, return the initial LPD
return initialLPD; return initialLPD;
} else if(stressLevel && !message) { //return all widgets in current stressLevel } else if (stressLevel && !message) {
//return all widgets in current stressLevel
return;
let allWidgets: Widget[] = []; let allWidgets: Widget[] = [];
//get all of the widgets in the inital LPD //get all of the widgets in the inital LPD
for (const [key, widget] of Object.entries(initialLPD.widgets)) { for (const [key, widget] of Object.entries(initialLPD.widgets)) {
allWidgets.push(widget); allWidgets.push(widget);
} }
stressLevel = Math.floor(stressLevel! * 3); //get stress level as int stressLevel = Math.floor(stressLevel! * 3); //get stress level as int
const tempMessage = <Message>({ //dummy message to put into LPD function const tempMessage = <Message>{
//dummy message to put into LPD function
priority: -1, priority: -1,
}) };
//return the intial LPD widgets with the widgets returned from the LPD function(all widgets in this stress level) //return the intial LPD widgets with the widgets returned from the LPD function(all widgets in this stress level)
return allWidgets.concat(stressLevelLPDFunctions[stressLevel](tempMessage)); return allWidgets.concat(stressLevelLPDFunctions[stressLevel](tempMessage));
} else { } else {

View File

@ -109,18 +109,29 @@ export const minimapSlice = createSlice({
}, },
addElementToWidget: { addElementToWidget: {
prepare(widgetId: string, element: Element) { prepare(widgetId: string, elements: Element[]) {
return { payload: { widgetId, element } }; return { payload: { widgetId, elements } };
}, },
reducer( reducer(
state, state,
action: PayloadAction<{ widgetId: string; element: Element }>, action: PayloadAction<{ widgetId: string; elements: Element[] }>,
) { ) {
console.log('adding elements to widget', action.payload.element); console.log('adding elements to widget', action.payload.elements);
state.widgets[action.payload.widgetId].elements.push( const { widgetId, elements } = action.payload;
action.payload.element, const widget = state.widgets[widgetId];
);
if (!widget) {
console.error(
`Widget with id ${widgetId} not found (addElementToWidget)`,
);
return;
}
state.widgets[widgetId] = {
...widget,
elements: [...widget.elements, ...elements],
};
}, },
}, },