feat: enable force select profile
This commit is contained in:
parent
99a8e25411
commit
5eddf4f1aa
@ -41,11 +41,11 @@ interface Props {
|
||||
index: number;
|
||||
selected: boolean;
|
||||
itemData: CmdType.ProfileItem;
|
||||
onClick: () => void;
|
||||
onSelect: (force: boolean) => void;
|
||||
}
|
||||
|
||||
const ProfileItem: React.FC<Props> = (props) => {
|
||||
const { index, selected, itemData, onClick } = props;
|
||||
const { index, selected, itemData, onSelect } = props;
|
||||
|
||||
const { mutate } = useSWRConfig();
|
||||
const [loading, setLoading] = useState(false);
|
||||
@ -68,6 +68,11 @@ const ProfileItem: React.FC<Props> = (props) => {
|
||||
}
|
||||
};
|
||||
|
||||
const onForceSelect = () => {
|
||||
setAnchorEl(null);
|
||||
onSelect(true);
|
||||
};
|
||||
|
||||
const onUpdateWrapper = (withProxy: boolean) => async () => {
|
||||
setAnchorEl(null);
|
||||
if (loading) return;
|
||||
@ -136,7 +141,7 @@ const ProfileItem: React.FC<Props> = (props) => {
|
||||
|
||||
return { bgcolor, color, "& h2": { color: h2color } };
|
||||
}}
|
||||
onClick={onClick}
|
||||
onClick={() => onSelect(false)}
|
||||
onContextMenu={handleContextMenu}
|
||||
>
|
||||
<Box display="flex" justifyContent="space-between">
|
||||
@ -211,7 +216,8 @@ const ProfileItem: React.FC<Props> = (props) => {
|
||||
anchorPosition={position}
|
||||
anchorReference="anchorPosition"
|
||||
>
|
||||
<MenuItem onClick={onEdit}>Edit</MenuItem>
|
||||
<MenuItem onClick={onForceSelect}>Select</MenuItem>
|
||||
<MenuItem onClick={onEdit}>Edit(VScode)</MenuItem>
|
||||
<MenuItem onClick={onUpdateWrapper(false)}>Update</MenuItem>
|
||||
<MenuItem onClick={onUpdateWrapper(true)}>Update(Proxy)</MenuItem>
|
||||
<MenuItem onClick={onDelete}>Delete</MenuItem>
|
||||
|
@ -80,20 +80,18 @@ const ProfilePage = () => {
|
||||
};
|
||||
|
||||
const lockRef = useRef(false);
|
||||
const onProfileChange = (index: number) => {
|
||||
if (index === profiles.current || lockRef.current) return;
|
||||
const onSelect = async (index: number, force: boolean) => {
|
||||
if (lockRef.current) return;
|
||||
if (!force && index === profiles.current) return;
|
||||
lockRef.current = true;
|
||||
selectProfile(index)
|
||||
.then(() => {
|
||||
try {
|
||||
await selectProfile(index);
|
||||
mutate("getProfiles", { ...profiles, current: index }, true);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
})
|
||||
.finally(() => {
|
||||
} catch (err: any) {
|
||||
err && Notice.error(err.toString());
|
||||
} finally {
|
||||
lockRef.current = false;
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
@ -125,7 +123,7 @@ const ProfilePage = () => {
|
||||
index={idx}
|
||||
selected={profiles.current === idx}
|
||||
itemData={item}
|
||||
onClick={() => onProfileChange(idx)}
|
||||
onSelect={(f) => onSelect(idx, f)}
|
||||
/>
|
||||
</Grid>
|
||||
))}
|
||||
|
Loading…
Reference in New Issue
Block a user