Skip to content

Commit 97c4728

Browse files
authored
feat(web): impl function logs page (#559)
* fix: error when no function data * feat: add logs page
1 parent 8df3f00 commit 97c4728

8 files changed

Lines changed: 228 additions & 123 deletions

File tree

web/.eslintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"react/no-children-prop": 0,
66
"simple-import-sort/imports": "error",
77
"simple-import-sort/exports": "error",
8-
"@next/next/no-img-element": 0
8+
"@next/next/no-img-element": 0,
9+
"no-unused-vars": "error"
910
},
1011
"plugins": ["simple-import-sort"],
1112
"overrides": [

web/src/apis/v1/api-auto.d.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ declare namespace Definitions {
5858
policy?: string;
5959
storage?: string /* The storage capacity of the bucket: "1Gi", "0.5Gi", "100Gi" */;
6060
};
61+
62+
export type CreateDependencyDto = {
63+
name?: string;
64+
spec?: string;
65+
};
6166
}
6267

6368
declare namespace Paths {
@@ -380,4 +385,28 @@ declare namespace Paths {
380385

381386
export type Responses = any;
382387
}
388+
389+
namespace DependencyControllerAdd {
390+
export type QueryParameters = any;
391+
392+
export type BodyParameters = Definitions.CreateDependencyDto;
393+
394+
export type Responses = any;
395+
}
396+
397+
namespace DependencyControllerGetDependencies {
398+
export type QueryParameters = any;
399+
400+
export type BodyParameters = any;
401+
402+
export type Responses = any;
403+
}
404+
405+
namespace DependencyControllerRemove {
406+
export type QueryParameters = any;
407+
408+
export type BodyParameters = any;
409+
410+
export type Responses = any;
411+
}
383412
}

web/src/apis/v1/apps.ts

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ export async function FunctionControllerRemove(
9898
* Compile a function
9999
*/
100100
export async function FunctionControllerCompile(
101-
params: Definitions.CompileFunctionDto,
101+
params: Definitions.CompileFunctionDto | any,
102102
): Promise<Paths.FunctionControllerCompile.Responses> {
103103
// /v1/apps/{appid}/functions/{name}/compile
104104
let _params: { [key: string]: any } = {
@@ -484,3 +484,54 @@ export async function LogControllerGetLogs(
484484
params: params,
485485
});
486486
}
487+
488+
/**
489+
* Add a dependency
490+
*/
491+
export async function DependencyControllerAdd(
492+
params: Definitions.CreateDependencyDto | any,
493+
): Promise<Paths.DependencyControllerAdd.Responses> {
494+
// /v1/apps/{appid}/dependencies
495+
let _params: { [key: string]: any } = {
496+
appid: localStorage.getItem("app"),
497+
...params,
498+
};
499+
return request(`/v1/apps/${_params.appid}/dependencies`, {
500+
method: "POST",
501+
data: params,
502+
});
503+
}
504+
505+
/**
506+
* Get application dependencies
507+
*/
508+
export async function DependencyControllerGetDependencies(
509+
params: Paths.DependencyControllerGetDependencies.BodyParameters | any,
510+
): Promise<Paths.DependencyControllerGetDependencies.Responses> {
511+
// /v1/apps/{appid}/dependencies
512+
let _params: { [key: string]: any } = {
513+
appid: localStorage.getItem("app"),
514+
...params,
515+
};
516+
return request(`/v1/apps/${_params.appid}/dependencies`, {
517+
method: "GET",
518+
params: params,
519+
});
520+
}
521+
522+
/**
523+
* Remove a dependency
524+
*/
525+
export async function DependencyControllerRemove(
526+
params: Paths.DependencyControllerRemove.BodyParameters | any,
527+
): Promise<Paths.DependencyControllerRemove.Responses> {
528+
// /v1/apps/{appid}/dependencies/{name}
529+
let _params: { [key: string]: any } = {
530+
appid: localStorage.getItem("app"),
531+
...params,
532+
};
533+
return request(`/v1/apps/${_params.appid}/dependencies/${_params.name}`, {
534+
method: "DELETE",
535+
data: params,
536+
});
537+
}
Lines changed: 54 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,91 @@
1-
/* eslint-disable react/jsx-no-undef */
2-
import React, { useState } from "react";
31
import { ArrowLeftIcon, ArrowRightIcon, ChevronLeftIcon, ChevronRightIcon } from "@chakra-ui/icons";
4-
import {
5-
Flex,
6-
IconButton,
7-
NumberDecrementStepper,
8-
NumberIncrementStepper,
9-
NumberInput,
10-
NumberInputField,
11-
NumberInputStepper,
12-
Text,
13-
Tooltip,
14-
} from "@chakra-ui/react";
2+
import { Flex, IconButton, Text, Tooltip } from "@chakra-ui/react";
153

16-
export default function Pagination() {
17-
const [pageCount] = useState(0);
18-
const [canPreviousPage] = useState(false);
19-
const [canNextPage] = useState(false);
20-
const [pageIndex] = useState(0);
21-
const [pageOptions] = useState([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
4+
type PageValues = {
5+
page: number;
6+
limit: number;
7+
total?: number;
8+
};
229

23-
const previousPage = () => {};
24-
const nextPage = () => {};
10+
export default function Pagination(props: {
11+
values: PageValues;
12+
onChange: (values: PageValues) => void;
13+
}) {
14+
const { values, onChange } = props;
15+
const { page = 1, total, limit = 10 } = values;
16+
const maxPage = total ? Math.ceil(total / limit) : undefined;
2517

2618
return (
27-
<Flex justifyContent="space-between" m={4} alignItems="center">
19+
<Flex justifyContent="end" m={4} alignItems="center">
2820
<Flex>
2921
<Tooltip label="First Page">
3022
<IconButton
31-
onClick={() => gotoPage(0)}
32-
isDisabled={!canPreviousPage}
23+
onClick={() => {
24+
props.onChange({
25+
...values,
26+
page: 1,
27+
});
28+
}}
29+
isDisabled={page === 1}
3330
icon={<ArrowLeftIcon h={3} w={3} />}
3431
mr={4}
3532
aria-label={""}
3633
/>
3734
</Tooltip>
3835
<Tooltip label="Previous Page">
3936
<IconButton
40-
onClick={previousPage}
41-
isDisabled={!canPreviousPage}
37+
onClick={() =>
38+
onChange({
39+
...values,
40+
page: page - 1,
41+
})
42+
}
43+
isDisabled={page === 1}
4244
icon={<ChevronLeftIcon h={6} w={6} />}
4345
aria-label={""}
4446
/>
4547
</Tooltip>
4648
</Flex>
4749

4850
<Flex alignItems="center">
49-
<Text flexShrink="0" mr={8}>
50-
<Text fontWeight="bold" as="span">
51-
{pageIndex + 1}
52-
</Text>
53-
/
54-
<Text fontWeight="bold" as="span">
55-
{pageOptions.length}
56-
</Text>
57-
</Text>
58-
<Text flexShrink="0">Go:</Text>{" "}
59-
<NumberInput
60-
ml={2}
61-
mr={8}
62-
w={28}
63-
min={1}
64-
max={pageOptions.length}
65-
onChange={(value) => {
66-
const page = value ? parseInt(value, 10) - 1 : 0;
67-
gotoPage(page);
68-
}}
69-
defaultValue={pageIndex + 1}
70-
>
71-
<NumberInputField />
72-
<NumberInputStepper>
73-
<NumberIncrementStepper />
74-
<NumberDecrementStepper />
75-
</NumberInputStepper>
76-
</NumberInput>
77-
{/* <Select
78-
w={32}
79-
value={pageSize}
80-
onChange={(e) => {
81-
setPageSize(Number(e.target.value));
82-
}}
51+
<Text
52+
fontWeight="bold"
53+
as="span"
54+
width={"40px"}
55+
display="inline-block"
56+
textAlign={"center"}
8357
>
84-
{[10, 20, 30, 40, 50].map((pageSize) => (
85-
<option key={pageSize} value={pageSize}>
86-
Show {pageSize}
87-
</option>
88-
))}
89-
</Select> */}
58+
{page}
59+
</Text>
60+
/
61+
<Text fontWeight="bold" as="p" width={"40px"} display="inline-block" textAlign={"center"}>
62+
{isNaN(maxPage) ? "" : maxPage}
63+
</Text>
9064
</Flex>
9165

9266
<Flex>
9367
<Tooltip label="Next Page">
9468
<IconButton
95-
onClick={nextPage}
96-
isDisabled={!canNextPage}
69+
isDisabled={maxPage === page}
9770
icon={<ChevronRightIcon h={6} w={6} />}
9871
aria-label={""}
72+
onClick={() => {
73+
props.onChange({
74+
...values,
75+
page: page + 1,
76+
});
77+
}}
9978
/>
10079
</Tooltip>
10180
<Tooltip label="Last Page">
10281
<IconButton
103-
onClick={() => gotoPage(pageCount - 1)}
104-
isDisabled={!canNextPage}
82+
onClick={() => {
83+
props.onChange({
84+
...values,
85+
page: maxPage,
86+
});
87+
}}
88+
isDisabled={maxPage === page}
10589
icon={<ArrowRightIcon h={3} w={3} />}
10690
ml={4}
10791
aria-label={""}
@@ -111,6 +95,3 @@ export default function Pagination() {
11195
</Flex>
11296
);
11397
}
114-
function gotoPage(page: number) {
115-
throw new Error("Function not implemented.");
116-
}

web/src/constants/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable no-unused-vars */
12
export const SiderBarWidth = 60;
23
export const SmallNavHeight = 42;
34

web/src/layouts/Header/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export default function Header(props: { size: "sm" | "lg" }) {
5656
<div className="flex justify-between p-4 bg-white border-b">
5757
<div className="flex items-center">
5858
<img src="/logo.png" alt="logo" className="mr-2 rounded-full" width={30} />
59-
<span className=" font-bold text-lg">Laf 云开发</span>
59+
<span className=" font-bold text-lg">laf 云开发</span>
6060
<span className="ml-4 mr-4"> / </span>
6161
<span>{userInfo.username}</span>
6262
</div>

0 commit comments

Comments
 (0)