Update wired conditions

This commit is contained in:
Bill 2021-06-29 04:24:12 -04:00
parent 6fa35f9bcf
commit b7e822678f
15 changed files with 133 additions and 125 deletions

View File

@ -56,4 +56,6 @@ export function GetWiredConditionLayout(code: number): JSX.Element
case WiredConditionlayout.NOT_USER_COUNT_IN: case WiredConditionlayout.NOT_USER_COUNT_IN:
return <WiredConditionUserCountInRoomView />; return <WiredConditionUserCountInRoomView />;
} }
return null;
} }

View File

@ -4,10 +4,10 @@ import { useWiredContext } from '../../../context/WiredContext';
import { WiredFurniType } from '../../../WiredView.types'; import { WiredFurniType } from '../../../WiredView.types';
import { WiredConditionBaseView } from '../base/WiredConditionBaseView'; import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
const allowedHanditemIds: number[] = [ 2, 5, 7, 8, 9, 10, 27 ];
export const WiredConditionActorHasHandItemView: FC<{}> = props => export const WiredConditionActorHasHandItemView: FC<{}> = props =>
{ {
const allowedHanditemIds: number[] = [2, 5, 7, 8, 9, 10, 27];
const [ handItemId, setHandItemId ] = useState(-1); const [ handItemId, setHandItemId ] = useState(-1);
const { trigger = null, setIntParams = null } = useWiredContext(); const { trigger = null, setIntParams = null } = useWiredContext();
@ -18,18 +18,20 @@ export const WiredConditionActorHasHandItemView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([handItemId]); setIntParams([ handItemId ]);
}, [ handItemId, setIntParams ]); }, [ handItemId, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.handitem') }</div> <div className="form-group">
<select className="form-select" value={ handItemId } onChange={ (e) => setHandItemId(Number(e.target.value)) }> <label className="fw-bold">{ LocalizeText('wiredfurni.params.handitem') }</label>
{allowedHanditemIds && allowedHanditemIds.map(value => <select className="form-select form-select-sm" value={ handItemId } onChange={ event => setHandItemId(parseInt(event.target.value)) }>
{ { allowedHanditemIds.map((value, index) =>
return <option value={ value }>{ LocalizeText('handitem' + value) }</option> {
})} return <option key={ index } value={ value }>{ LocalizeText(`handitem${ value }`) }</option>
</select> }) }
</select>
</div>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }

View File

@ -4,7 +4,5 @@ import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
export const WiredConditionActorIsGroupMemberView: FC<{}> = props => export const WiredConditionActorIsGroupMemberView: FC<{}> = props =>
{ {
return ( return <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ null } />;
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ null }></WiredConditionBaseView>
);
} }

View File

@ -4,7 +4,5 @@ import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
export const WiredConditionActorIsOnFurniView: FC<{}> = props => export const WiredConditionActorIsOnFurniView: FC<{}> = props =>
{ {
return ( return <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ null } />;
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ null }></WiredConditionBaseView>
);
} }

View File

@ -4,6 +4,8 @@ import { useWiredContext } from '../../../context/WiredContext';
import { WiredFurniType } from '../../../WiredView.types'; import { WiredFurniType } from '../../../WiredView.types';
import { WiredConditionBaseView } from '../base/WiredConditionBaseView'; import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
const teamIds: number[] = [ 1, 2, 3, 4 ];
export const WiredConditionActorIsTeamMemberView: FC<{}> = props => export const WiredConditionActorIsTeamMemberView: FC<{}> = props =>
{ {
const [ selectedTeam, setSelectedTeam ] = useState(-1); const [ selectedTeam, setSelectedTeam ] = useState(-1);
@ -16,23 +18,25 @@ export const WiredConditionActorIsTeamMemberView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([selectedTeam]); setIntParams([ selectedTeam ]);
}, [ selectedTeam, setIntParams ]); }, [ selectedTeam, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.team') }</div> <div className="form-group">
{ [1, 2, 3, 4].map(team => <label className="fw-bold">{ LocalizeText('wiredfurni.params.team') }</label>
{ { teamIds.map((value, index) =>
return ( {
<div key={ team } className="form-check"> return (
<input className="form-check-input" type="radio" name="selectedTeam" id={'selectedTeam' + team} checked={ selectedTeam === team } onChange={() => setSelectedTeam(team)} /> <div key={ index } className="form-check">
<label className="form-check-label" htmlFor={'selectedTeam' + team}> <input className="form-check-input" type="radio" name="selectedTeam" id={ `selectedTeam${ value }` } checked={ (selectedTeam === value) } onChange={ event => setSelectedTeam(value) } />
{ LocalizeText('wiredfurni.params.team.' + team) } <label className="form-check-label" htmlFor={ `selectedTeam${ value }` }>
</label> { LocalizeText(`wiredfurni.params.team.${ value }`) }
</div> </label>
) </div>
}) } )
}) }
</div>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }

View File

@ -21,7 +21,7 @@ export const WiredConditionActorIsWearingBadgeView: FC<{}> = props =>
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="form-group mb-2"> <div className="form-group">
<label className="fw-bold">{ LocalizeText('wiredfurni.params.badgecode') }</label> <label className="fw-bold">{ LocalizeText('wiredfurni.params.badgecode') }</label>
<input type="text" className="form-control form-control-sm" value={ badge } onChange={ event => setBadge(event.target.value) } /> <input type="text" className="form-control form-control-sm" value={ badge } onChange={ event => setBadge(event.target.value) } />
</div> </div>

View File

@ -16,14 +16,14 @@ export const WiredConditionActorIsWearingEffectView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([effect]); setIntParams([ effect ]);
}, [ effect, setIntParams ]); }, [ effect, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="form-group mb-2"> <div className="form-group">
<label className="fw-bold">{ LocalizeText('wiredfurni.params.effectid') }</label> <label className="fw-bold">{ LocalizeText('wiredfurni.params.effectid') }</label>
<input type="number" className="form-control form-control-sm" value={ effect } onChange={ event => setEffect(Number(event.target.value)) } /> <input type="number" className="form-control form-control-sm" value={ effect } onChange={ event => setEffect(parseInt(event.target.value)) } />
</div> </div>
</WiredConditionBaseView> </WiredConditionBaseView>
); );

View File

@ -4,7 +4,5 @@ import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
export const WiredConditionFurniHasAvatarOnView: FC<{}> = props => export const WiredConditionFurniHasAvatarOnView: FC<{}> = props =>
{ {
return ( return <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ null } />;
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ null }></WiredConditionBaseView>
);
} }

View File

@ -16,23 +16,25 @@ export const WiredConditionFurniHasFurniOnView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([requireAll]); setIntParams([ requireAll ]);
}, [ requireAll, setIntParams ]); }, [ requireAll, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.requireall') }</div> <div className="form-group">
{ [0, 1].map(option => <label className="fw-bold">{ LocalizeText('wiredfurni.params.requireall') }</label>
{ { [0, 1].map(value =>
return ( {
<div key={ option } className="form-check"> return (
<input className="form-check-input" type="radio" name="requireAll" id={'requireAll' + option} checked={ requireAll === option } onChange={() => setRequireAll(option)} /> <div key={ value } className="form-check">
<label className="form-check-label" htmlFor={'requireAll' + option}> <input className="form-check-input" type="radio" name="requireAll" id={ `requireAll${ value }` } checked={ (requireAll === value) } onChange={ event => setRequireAll(value) } />
{ LocalizeText('wiredfurni.params.requireall.' + option) } <label className="form-check-label" htmlFor={ `requireAll${ value }` }>
</label> { LocalizeText('wiredfurni.params.requireall.' + value) }
</div> </label>
) </div>
}) } )
}) }
</div>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }

View File

@ -16,23 +16,25 @@ export const WiredConditionFurniHasNotFurniOnView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([requireAll]); setIntParams([ requireAll ]);
}, [ requireAll, setIntParams ]); }, [ requireAll, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.not_requireall') }</div> <div className="form-group">
{ [0, 1].map(option => <label className="fw-bold">{ LocalizeText('wiredfurni.params.not_requireall') }</label>
{ { [0, 1].map(value =>
return ( {
<div key={ option } className="form-check"> return (
<input className="form-check-input" type="radio" name="requireAll" id={'requireAll' + option} checked={ requireAll === option } onChange={() => setRequireAll(option)} /> <div key={ value } className="form-check">
<label className="form-check-label" htmlFor={'requireAll' + option}> <input className="form-check-input" type="radio" name="requireAll" id={ `requireAll${ value }` } checked={ (requireAll === value) } onChange={ event => setRequireAll(value) } />
{ LocalizeText('wiredfurni.params.not_requireall.' + option) } <label className="form-check-label" htmlFor={ `requireAll${ value }` }>
</label> { LocalizeText(`wiredfurni.params.not_requireall.${ value }`) }
</div> </label>
) </div>
}) } )
}) }
</div>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }

View File

@ -4,7 +4,5 @@ import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
export const WiredConditionFurniIsOfTypeView: FC<{}> = props => export const WiredConditionFurniIsOfTypeView: FC<{}> = props =>
{ {
return ( return <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID_OR_BY_TYPE } save={ null } />;
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID_OR_BY_TYPE } save={ null }></WiredConditionBaseView>
);
} }

View File

@ -20,29 +20,31 @@ export const WiredConditionFurniMatchesSnapshotView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([stateFlag, directionFlag, positionFlag]); setIntParams([ stateFlag, directionFlag, positionFlag ]);
}, [ directionFlag, positionFlag, setIntParams, stateFlag ]); }, [ directionFlag, positionFlag, stateFlag, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_BY_ID } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.conditions') }</div> <div className="form-group">
<div className="form-check"> <label className="fw-bold">{ LocalizeText('wiredfurni.params.conditions') }</label>
<input className="form-check-input" type="checkbox" id="stateFlag" onChange={(e) => setStateFlag(e.target.checked ? 1 : 0)} /> <div className="form-check">
<label className="form-check-label" htmlFor="stateFlag"> <input className="form-check-input" type="checkbox" id="stateFlag" onChange={ event => setStateFlag(event.target.checked ? 1 : 0) } />
{ LocalizeText('wiredfurni.params.condition.state') } <label className="form-check-label" htmlFor="stateFlag">
</label> { LocalizeText('wiredfurni.params.condition.state') }
</div> </label>
<div className="form-check"> </div>
<input className="form-check-input" type="checkbox" id="directionFlag" onChange={(e) => setDirectionFlag(e.target.checked ? 1 : 0)} /> <div className="form-check">
<label className="form-check-label" htmlFor="directionFlag"> <input className="form-check-input" type="checkbox" id="directionFlag" onChange={ event => setDirectionFlag(event.target.checked ? 1 : 0) } />
{ LocalizeText('wiredfurni.params.condition.direction') } <label className="form-check-label" htmlFor="directionFlag">
</label> { LocalizeText('wiredfurni.params.condition.direction') }
</div> </label>
<div className="form-check"> </div>
<input className="form-check-input" type="checkbox" id="positionFlag" onChange={(e) => setPositionFlag(e.target.checked ? 1 : 0)} /> <div className="form-check">
<label className="form-check-label" htmlFor="positionFlag"> <input className="form-check-input" type="checkbox" id="positionFlag" onChange={ event => setPositionFlag(event.target.checked ? 1 : 0) } />
{ LocalizeText('wiredfurni.params.condition.position') } <label className="form-check-label" htmlFor="positionFlag">
</label> { LocalizeText('wiredfurni.params.condition.position') }
</label>
</div>
</div> </div>
</WiredConditionBaseView> </WiredConditionBaseView>
); );

View File

@ -1,6 +1,7 @@
import Slider from 'rc-slider/lib/Slider'; import Slider from 'rc-slider/lib/Slider';
import { FC, useCallback, useEffect, useState } from 'react'; import { FC, useCallback, useEffect, useState } from 'react';
import { LocalizeText } from '../../../../../utils/LocalizeText'; import { LocalizeText } from '../../../../../utils/LocalizeText';
import { GetWiredTimeLocale } from '../../../common/GetWiredTimeLocale';
import { useWiredContext } from '../../../context/WiredContext'; import { useWiredContext } from '../../../context/WiredContext';
import { WiredFurniType } from '../../../WiredView.types'; import { WiredFurniType } from '../../../WiredView.types';
import { WiredConditionBaseView } from '../base/WiredConditionBaseView'; import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
@ -17,20 +18,19 @@ export const WiredConditionTimeElapsedLessView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([time]); setIntParams([ time ]);
}, [ time, setIntParams ]); }, [ time, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.allowbefore', ['seconds'], [time.toString()]) }</div> <div className="form-group">
<Slider <label className="fw-bold">{ LocalizeText('wiredfurni.params.allowbefore', [ 'seconds' ], [ GetWiredTimeLocale(time) ]) }</label>
defaultValue={ time } <Slider
dots={ true } value={ time }
min={ 0.5 } min={ 1 }
max={ 600 } max={ 1200 }
step={ 0.5 } onChange={ event => setTime(event) } />
onChange={ event => setTime(event) } </div>
/>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }

View File

@ -1,6 +1,7 @@
import Slider from 'rc-slider/lib/Slider'; import Slider from 'rc-slider/lib/Slider';
import { FC, useCallback, useEffect, useState } from 'react'; import { FC, useCallback, useEffect, useState } from 'react';
import { LocalizeText } from '../../../../../utils/LocalizeText'; import { LocalizeText } from '../../../../../utils/LocalizeText';
import { GetWiredTimeLocale } from '../../../common/GetWiredTimeLocale';
import { useWiredContext } from '../../../context/WiredContext'; import { useWiredContext } from '../../../context/WiredContext';
import { WiredFurniType } from '../../../WiredView.types'; import { WiredFurniType } from '../../../WiredView.types';
import { WiredConditionBaseView } from '../base/WiredConditionBaseView'; import { WiredConditionBaseView } from '../base/WiredConditionBaseView';
@ -17,20 +18,19 @@ export const WiredConditionTimeElapsedMoreView: FC<{}> = props =>
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([time]); setIntParams([ time ]);
}, [ time, setIntParams ]); }, [ time, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.allowafter', ['seconds'], [time.toString()]) }</div> <div className="form-group">
<Slider <label className="fw-bold">{ LocalizeText('wiredfurni.params.allowafter', [ 'seconds' ], [ GetWiredTimeLocale(time) ]) }</label>
defaultValue={ time } <Slider
dots={ true } value={ time }
min={ 0.5 } min={ 1 }
max={ 600 } max={ 1200 }
step={ 0.5 } onChange={ event => setTime(event) } />
onChange={ event => setTime(event) } </div>
/>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }

View File

@ -18,34 +18,36 @@ export const WiredConditionUserCountInRoomView: FC<{}> = props =>
setMin(trigger.intData[0]); setMin(trigger.intData[0]);
setMax(trigger.intData[1]); setMax(trigger.intData[1]);
} }
else
{
setMin(1);
setMax(1);
}
}, [ trigger ]); }, [ trigger ]);
const save = useCallback(() => const save = useCallback(() =>
{ {
setIntParams([min, max]); setIntParams([ min, max ]);
}, [ min, max, setIntParams ]); }, [ min, max, setIntParams ]);
return ( return (
<WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }> <WiredConditionBaseView requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.usercountmin', ['value'], [min.toString()]) }</div> <div className="form-group mb-2">
<Slider <label className="fw-bold">{ LocalizeText('wiredfurni.params.usercountmin', [ 'value' ], [ min.toString() ]) }</label>
defaultValue={ min } <Slider
dots={ true } value={ min }
min={ 1 } min={ 1 }
max={ 50 } max={ 50 }
step={ 1 } onChange={ event => setMin(event) } />
onChange={ event => setMin(event) } </div>
/> <div className="form-group">
<hr className="my-1 mb-2 bg-dark" /> <label className="fw-bold">{ LocalizeText('wiredfurni.params.usercountmax', [ 'value' ], [ max.toString() ]) }</label>
<div className="fw-bold">{ LocalizeText('wiredfurni.params.usercountmax', ['value'], [max.toString()]) }</div> <Slider
<Slider value={ max }
defaultValue={ max } min={ 1 }
dots={ true } max={ 50 }
min={ 1 } onChange={ event => setMax(event) } />
max={ 50 } </div>
step={ 1 }
onChange={ event => setMax(event) }
/>
</WiredConditionBaseView> </WiredConditionBaseView>
); );
} }