feat: enable force select profile

This commit is contained in:
GyDi 2022-01-17 02:28:23 +08:00
parent 99a8e25411
commit 5eddf4f1aa
No known key found for this signature in database
GPG Key ID: 1C95E0D3467B3084
2 changed files with 21 additions and 17 deletions

View File

@ -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>

View File

@ -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(() => {
mutate("getProfiles", { ...profiles, current: index }, true);
})
.catch((err) => {
console.error(err);
})
.finally(() => {
lockRef.current = false;
});
try {
await selectProfile(index);
mutate("getProfiles", { ...profiles, current: index }, true);
} 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>
))}