Skip to content

Commit d4ccd78

Browse files
authored
feat: add auto collapse delay for compact mode (#981)
* feat: add auto collapse delay for compact mode * refactor: change i18n * docs: update changelog
1 parent aef934e commit d4ccd78

8 files changed

Lines changed: 65 additions & 9 deletions

File tree

docs/content.en/docs/release-notes/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ feat(extension compatibility): minimum_coco_version #946
2626
feat: add compact mode for window #947
2727
feat: advanced settings search debounce & local query source weight #950
2828
feat: add window opacity configuration option #963
29-
29+
feat: add auto collapse delay for compact mode #981
3030

3131
### 🐛 Bug fix
3232

src/components/SearchChat/index.tsx

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,13 @@ function SearchChat({
103103
const [hideMiddleBorder, setHideMiddleBorder] = useState(false);
104104

105105
const setSuppressErrors = useAppStore((state) => state.setSuppressErrors);
106+
let collapseWindowTimer = useRef<ReturnType<typeof setTimeout>>();
106107

107108
const setWindowSize = useCallback(() => {
109+
if (collapseWindowTimer.current) {
110+
clearTimeout(collapseWindowTimer.current);
111+
}
112+
108113
const width = 680;
109114
let height = 590;
110115

@@ -128,12 +133,22 @@ function SearchChat({
128133
if (windowMode === "compact") {
129134
height = 84;
130135
}
131-
132-
setHideMiddleBorder(height < 590);
133-
setSuppressErrors(height < 590);
134136
}
135137

136-
platformAdapter.setWindowSize(width, height);
138+
if (height < 590) {
139+
const { compactModeAutoCollapseDelay } = useConnectStore.getState();
140+
141+
console.log("compactModeAutoCollapseDelay", compactModeAutoCollapseDelay);
142+
143+
collapseWindowTimer.current = setTimeout(() => {
144+
setHideMiddleBorder(true);
145+
setSuppressErrors(true);
146+
147+
platformAdapter.setWindowSize(width, height);
148+
}, compactModeAutoCollapseDelay * 1000);
149+
} else {
150+
platformAdapter.setWindowSize(width, height);
151+
}
137152
}, []);
138153

139154
const debouncedSetWindowSize = debounce(setWindowSize, 50);

src/components/Settings/Advanced/index.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
AppWindowMac,
55
ArrowUpWideNarrow,
66
MessageSquareMore,
7+
PanelTopClose,
78
Search,
89
ShieldCheck,
910
Unplug,
@@ -59,7 +60,12 @@ const Advanced = () => {
5960
const setAllowSelfSignature = useConnectStore((state) => {
6061
return state.setAllowSelfSignature;
6162
});
62-
const { searchDelay, setSearchDelay } = useConnectStore();
63+
const {
64+
searchDelay,
65+
setSearchDelay,
66+
compactModeAutoCollapseDelay,
67+
setCompactModeAutoCollapseDelay,
68+
} = useConnectStore();
6369

6470
const [localSearchResultWeight, setLocalSearchResultWeight] = useState(1);
6571

@@ -296,6 +302,25 @@ const Advanced = () => {
296302
</option>
297303
</select>
298304
</SettingsItem>
305+
306+
<SettingsItem
307+
icon={PanelTopClose}
308+
title={t(
309+
"settings.advanced.other.compactModeAutoCollapseDelay.title"
310+
)}
311+
description={t(
312+
"settings.advanced.other.compactModeAutoCollapseDelay.description"
313+
)}
314+
>
315+
<SettingsInput
316+
type="number"
317+
min={0}
318+
value={compactModeAutoCollapseDelay}
319+
onChange={(value) => {
320+
setCompactModeAutoCollapseDelay(!value ? 0 : Number(value));
321+
}}
322+
/>
323+
</SettingsItem>
299324
</div>
300325
</div>
301326
);

src/hooks/useSearch.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,6 @@ export function useSearch() {
159159

160160
const performSearch = useCallback(
161161
async (searchInput: string) => {
162-
console.log(123);
163-
164162
if (!searchInput) {
165163
setSearchState((prev) => ({ ...prev, suggests: [] }));
166164
return;

src/hooks/useSyncStore.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ export const useSyncStore = () => {
118118
const setEndpoint = useAppStore((state) => state.setEndpoint);
119119
const setLanguage = useAppStore((state) => state.setLanguage);
120120
const { setWindowMode } = useAppearanceStore();
121-
const { setSearchDelay } = useConnectStore();
121+
const { setSearchDelay, setCompactModeAutoCollapseDelay } = useConnectStore();
122122

123123
const setServerListSilently = useConnectStore(
124124
(state) => state.setServerListSilently
@@ -191,6 +191,7 @@ export const useSyncStore = () => {
191191
querySourceTimeout,
192192
searchDelay,
193193
allowSelfSignature,
194+
compactModeAutoCollapseDelay,
194195
} = payload;
195196
if (isNumber(connectionTimeout)) {
196197
setConnectionTimeout(connectionTimeout);
@@ -200,6 +201,7 @@ export const useSyncStore = () => {
200201
}
201202
setSearchDelay(searchDelay);
202203
setAllowSelfSignature(allowSelfSignature);
204+
setCompactModeAutoCollapseDelay(compactModeAutoCollapseDelay);
203205
}),
204206

205207
platformAdapter.listenEvent("change-appearance-store", ({ payload }) => {

src/locales/en/translation.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@
208208
"medium": "Medium",
209209
"low": "Low"
210210
}
211+
},
212+
"compactModeAutoCollapseDelay": {
213+
"title": "Compact Mode Auto-Collapse Delay",
214+
"description": "Adds a delay before collapsing in Compact Mode to avoid sudden size changes when typing or clearing input. Default: 10s."
211215
}
212216
}
213217
},

src/locales/zh/translation.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@
208208
"medium": "",
209209
"low": ""
210210
}
211+
},
212+
"compactModeAutoCollapseDelay": {
213+
"title": "紧凑模式自动收起延迟",
214+
"description": "为紧凑模式的自动收起添加延迟,避免输入或清空内容时窗口突然缩小。默认: 10s。"
211215
}
212216
}
213217
},

src/stores/connectStore.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ export type IConnectStore = {
4040
setAllowSelfSignature: (allowSelfSignature: boolean) => void;
4141
searchDelay: number;
4242
setSearchDelay: (searchDelay: number) => void;
43+
compactModeAutoCollapseDelay: number;
44+
setCompactModeAutoCollapseDelay: (
45+
compactModeAutoCollapseDelay: number
46+
) => void;
4347
};
4448

4549
export const useConnectStore = create<IConnectStore>()(
@@ -149,6 +153,10 @@ export const useConnectStore = create<IConnectStore>()(
149153
setSearchDelay(searchDelay) {
150154
return set(() => ({ searchDelay }));
151155
},
156+
compactModeAutoCollapseDelay: 10,
157+
setCompactModeAutoCollapseDelay(compactModeAutoCollapseDelay) {
158+
return set(() => ({ compactModeAutoCollapseDelay }));
159+
},
152160
}),
153161
{
154162
name: "connect-store",

0 commit comments

Comments
 (0)