Skip to content
This repository was archived by the owner on Jan 30, 2023. It is now read-only.

Commit 524e808

Browse files
authored
chore: Merge pull request #38 from alist-org/dev
Dev 2.4.0
2 parents 3cb5caf + 4759c84 commit 524e808

File tree

13 files changed

+514
-137
lines changed

13 files changed

+514
-137
lines changed

index.html

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,47 @@
33
<head>
44
<!-- customize head -->
55
<meta charset="UTF-8" />
6-
<link rel="icon" type="image/svg+xml" href="https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg" />
6+
<link
7+
rel="icon"
8+
type="image/svg+xml"
9+
href="https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg"
10+
/>
711
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8-
<meta name="referrer" content="no-referrer">
12+
<meta name="referrer" content="no-referrer" />
913
<meta name="generator" content="Alist V2" />
1014
<script src="https://g.alicdn.com/IMM/office-js/1.1.5/aliyun-web-office-sdk.min.js"></script>
15+
<script>
16+
window.matchMediaBak = window.matchMedia;
17+
window.matchMedia = function (e) {
18+
let result = window.matchMediaBak(e);
19+
if (!result.addEventListener) {
20+
result.addEventListener = function (event, listener) {
21+
result.addListener(listener);
22+
};
23+
result.removeEventListener = function (event, listener) {
24+
result.removeListener(listener);
25+
};
26+
}
27+
return result;
28+
};
29+
this.globalThis || (this.globalThis = this);
30+
</script>
1131
<title>Loading...</title>
1232
</head>
1333
<body>
1434
<script>
1535
window.ALIST = {
16-
cdn:"/CDN_URL/",
17-
api:undefined,
18-
}
36+
cdn: "/CDN_URL/",
37+
api: undefined,
38+
};
1939
</script>
2040
<div id="root"></div>
2141
<script type="module" src="/src/main.tsx"></script>
2242
<noscript>
23-
<strong>We're sorry but alist doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
43+
<strong
44+
>We're sorry but alist doesn't work properly without JavaScript enabled.
45+
Please enable it to continue.</strong
46+
>
2447
</noscript>
2548
<!-- customize body -->
2649
</body>

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
"@types/react-dom": "^17.0.11",
6161
"@types/react-router-dom": "^5.1.8",
6262
"@types/streamsaver": "^2.0.1",
63+
"@vitejs/plugin-legacy": "^1.8.1",
6364
"@vitejs/plugin-react-refresh": "^1.3.1",
6465
"typescript": "^4.5.4",
6566
"vite": "^2.7.10",

src/pages/list/context.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ export interface Meta {
3636
driver: string;
3737
upload: boolean;
3838
total: number;
39+
readme: string;
3940
}
4041

4142
export interface PathResp {
@@ -68,7 +69,8 @@ type TypeType =
6869
| "error"
6970
| "loading"
7071
| "unauthorized"
71-
| "nexting";
72+
| "nexting"
73+
| "search";
7274

7375
interface Sort {
7476
orderBy?: "name" | "updated_at" | "size";
@@ -132,7 +134,7 @@ export const IContext = createContext<ContextProps>({
132134
selectFiles: [],
133135
setSelectFiles: () => {},
134136
setType: () => {},
135-
meta: { driver: "", upload: false, total: 0 },
137+
meta: { driver: "", upload: false, total: 0, readme: "" },
136138
setMeta: () => {},
137139
loggedIn: false,
138140
page: { page_num: 1, page_size: 30 },
@@ -263,6 +265,7 @@ const IContextProvider = (props: any) => {
263265
driver: "",
264266
upload: false,
265267
total: 0,
268+
readme: "",
266269
});
267270
const [loggedIn, setLoggedIn] = React.useState<boolean>(false);
268271
if (!settingLoaded) {

src/pages/list/index.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,14 @@ const Do = (props: any) => {
4747
const history = useHistory();
4848
const location = useLocation();
4949
const toast = useToast();
50-
const { path,cancelPath } = useApi();
50+
const { path, cancelPath } = useApi();
5151
const refresh = useSyncCallback(() => {
5252
if (!settingLoaded) {
5353
return;
5454
}
55+
if (switchToSearch()) {
56+
return;
57+
}
5558
cancelPath();
5659
console.log("refresh");
5760
console.log(page);
@@ -159,6 +162,20 @@ const Do = (props: any) => {
159162
useChangeEffect(() => {
160163
nextPage();
161164
}, [page]);
165+
const switchToSearch = () => {
166+
const query = new URLSearchParams(location.search);
167+
const search = query.get("s");
168+
if (search) {
169+
setType("search");
170+
return true;
171+
}
172+
return false;
173+
};
174+
useEffect(() => {
175+
if(!switchToSearch()){
176+
allRefresh();
177+
}
178+
}, [location.search]);
162179
const { isOpen, onClose, onOpen } = useDisclosure();
163180
const initialRef = React.useRef();
164181
useEffect(() => {

src/pages/list/layout/header.tsx

Lines changed: 103 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ import {
99
Tooltip,
1010
useColorModeValue,
1111
Box,
12+
SlideFade,
1213
} from "@chakra-ui/react";
13-
import React, { useContext, useRef } from "react";
14+
import React, { useContext, useRef, useState } from "react";
1415
import { IContext } from "../context";
1516
import { FaListUl } from "react-icons/fa";
1617
// import { AiTwotoneCopy } from "react-icons/ai";
@@ -25,6 +26,7 @@ import { Link, useLocation } from "react-router-dom";
2526
import { copyToClip } from "../../../utils/copy-clip";
2627
import useFileUrl from "../../../hooks/useFileUrl";
2728
import Uploader, { UploaderHandle } from "./uploader";
29+
import Search from "./search";
2830

2931
const Header = () => {
3032
const { t } = useTranslation();
@@ -46,16 +48,14 @@ const Header = () => {
4648
logos.split(",").shift(),
4749
logos.split(",").pop()
4850
) as string;
49-
const { pathname } = useLocation();
5051
const uploadRef = useRef<UploaderHandle>(null);
52+
const [isSearch, setIsSearch] = useState(false);
5153
return (
5254
<Flex className="header" px="2" py="2" justify="space-between" w="full">
5355
<Link to="/" className="logo">
5456
{logo.includes("http") ? (
5557
<Image
56-
fallback={
57-
<Spinner color={getSetting("icon color") || "#1890ff"} />
58-
}
58+
fallback={<Spinner color={getSetting("icon color") || "#1890ff"} />}
5959
rounded="lg"
6060
h="44px"
6161
w="auto"
@@ -66,113 +66,117 @@ const Header = () => {
6666
)}
6767
</Link>
6868
<HStack className="buttons" spacing="2">
69-
{type === "file" && (
70-
<Tooltip
71-
shouldWrapChildren
72-
hasArrow
73-
placement="bottom"
74-
label={t("Download")}
75-
>
76-
<Icon
77-
cursor="pointer"
78-
boxSize={6}
79-
as={BsFillArrowDownCircleFill}
80-
onClick={() => {
81-
if (type === "file") {
82-
let url = fileUrl();
83-
window.open(url, "_blank");
84-
return;
85-
}
86-
// if (multiSelect) {
87-
// downPack(selectFiles);
88-
// return;
89-
// }
90-
// if (type === "folder") {
91-
// downPack(files);
92-
// return;
93-
// }
94-
}}
95-
/>
96-
</Tooltip>
69+
{["folder", "search"].includes(type) && (
70+
<Search isSearch={isSearch} setIsSearch={setIsSearch} />
9771
)}
98-
{type === "folder" &&
99-
!getSetting("no upload").split(",").includes(meta.driver) &&
100-
(meta.upload || loggedIn) && (
101-
<Box>
72+
{!isSearch && (
73+
<SlideFade in={!isSearch} offsetX="20px" offsetY={0}>
74+
<HStack spacing="2">
75+
{type === "file" && (
76+
<Tooltip
77+
shouldWrapChildren
78+
hasArrow
79+
placement="bottom"
80+
label={t("Download")}
81+
>
82+
<Icon
83+
cursor="pointer"
84+
boxSize={6}
85+
as={BsFillArrowDownCircleFill}
86+
onClick={() => {
87+
if (type === "file") {
88+
let url = fileUrl();
89+
window.open(url, "_blank");
90+
return;
91+
}
92+
}}
93+
/>
94+
</Tooltip>
95+
)}
96+
{type === "folder" &&
97+
!getSetting("no upload").split(",").includes(meta.driver) &&
98+
(meta.upload || loggedIn) && (
99+
<Box>
100+
<Tooltip
101+
shouldWrapChildren
102+
hasArrow
103+
placement="bottom"
104+
label={t("Upload file")}
105+
>
106+
<Icon
107+
cursor="pointer"
108+
boxSize={6}
109+
as={BsFillArrowUpCircleFill}
110+
onClick={() => {
111+
uploadRef.current!.upload();
112+
}}
113+
/>
114+
</Tooltip>
115+
<Uploader ref={uploadRef} />
116+
</Box>
117+
)}
118+
{type !== "error" && (
119+
<Tooltip
120+
shouldWrapChildren
121+
hasArrow
122+
placement="bottom"
123+
label={t("Copy direct link")}
124+
>
125+
<Icon
126+
cursor="pointer"
127+
boxSize={6}
128+
as={IoIosCopy}
129+
onClick={() => {
130+
let content = "";
131+
if (type === "file") {
132+
content = fileUrl();
133+
} else {
134+
let files_ = files;
135+
if (multiSelect) {
136+
files_ = selectFiles;
137+
}
138+
content = files_
139+
.filter((file) => file.type !== 1)
140+
.map((file) => {
141+
return fileUrl(file);
142+
})
143+
.join("\n");
144+
}
145+
copyToClip(content);
146+
toast({
147+
title: t("Copied"),
148+
status: "success",
149+
duration: 3000,
150+
isClosable: true,
151+
});
152+
}}
153+
/>
154+
</Tooltip>
155+
)}
102156
<Tooltip
103157
shouldWrapChildren
104158
hasArrow
105159
placement="bottom"
106-
label={t("Upload file")}
160+
label={t("switch to layout view", {
161+
layout: t(show === "list" ? "grid" : "list"),
162+
})}
107163
>
108164
<Icon
109-
cursor="pointer"
110165
boxSize={6}
111-
as={BsFillArrowUpCircleFill}
166+
cursor="pointer"
112167
onClick={() => {
113-
uploadRef.current!.upload();
168+
setShow!(show === "list" ? "grid" : "list");
169+
localStorage.setItem(
170+
"show",
171+
show === "list" ? "grid" : "list"
172+
);
114173
}}
174+
as={show === "list" ? BsFillGridFill : FaListUl}
115175
/>
116176
</Tooltip>
117-
<Uploader ref={uploadRef} />
118-
</Box>
119-
)}
120-
{type !== "error" && (
121-
<Tooltip
122-
shouldWrapChildren
123-
hasArrow
124-
placement="bottom"
125-
label={t("Copy direct link")}
126-
>
127-
<Icon
128-
cursor="pointer"
129-
boxSize={6}
130-
as={IoIosCopy}
131-
onClick={() => {
132-
let content = "";
133-
if (type === "file") {
134-
content = fileUrl();
135-
} else {
136-
let files_ = files;
137-
if (multiSelect) {
138-
files_ = selectFiles;
139-
}
140-
content = files_
141-
.filter((file) => file.type !== 1)
142-
.map((file) => {
143-
return fileUrl(file);
144-
})
145-
.join("\n");
146-
}
147-
copyToClip(content);
148-
toast({
149-
title: t("Copied"),
150-
status: "success",
151-
duration: 3000,
152-
isClosable: true,
153-
});
154-
}}
155-
/>
156-
</Tooltip>
177+
</HStack>
178+
</SlideFade>
157179
)}
158-
<Tooltip
159-
shouldWrapChildren
160-
hasArrow
161-
placement="bottom"
162-
label={t("switch to layout view", {
163-
layout: t(show === "list" ? "grid" : "list"),
164-
})}
165-
>
166-
<Icon
167-
boxSize={6}
168-
cursor="pointer"
169-
onClick={() => {
170-
setShow!(show === "list" ? "grid" : "list");
171-
localStorage.setItem("show", show === "list" ? "grid" : "list");
172-
}}
173-
as={show === "list" ? BsFillGridFill : FaListUl}
174-
/>
175-
</Tooltip>
176180
</HStack>
177181
</Flex>
178182
);

0 commit comments

Comments
 (0)