Skip to content

Commit ee903fe

Browse files
authored
Merge pull request #1402 from chhsiao1981/refactor-feed
replace feedSlice to reducers.feed
2 parents b4c5e56 + a941594 commit ee903fe

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+440
-784
lines changed

src/api/common.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
import axios, { type AxiosProgressEvent } from "axios";
2-
import ChrisAPIClient from "./chrisapiclient";
31
import type {
2+
ComputeResource,
3+
Feed,
44
Pipeline,
55
PipelineList,
6-
PluginPiping,
7-
Feed,
8-
Plugin,
96
PipelinePipingDefaultParameterList,
10-
ComputeResource,
7+
Plugin,
8+
PluginPiping,
119
} from "@fnndsc/chrisapi";
10+
import axios, { type AxiosProgressEvent } from "axios";
1211
import { quote } from "shlex";
12+
import ChrisAPIClient from "./chrisapiclient";
1313

1414
export function elipses(str: string, len: number) {
1515
if (str.length <= len) return str;
@@ -312,7 +312,7 @@ export function catchError(errorRequest: any) {
312312
const data = errorRequest.response.data;
313313
// Iterate through each key in the data object
314314
for (const key in data) {
315-
if (Object.prototype.hasOwnProperty.call(data, key)) {
315+
if (Object.hasOwn(data, key)) {
316316
const value = data[key];
317317
// Check if the value is an array with at least one message
318318
if (Array.isArray(value) && value.length > 0) {

src/components/ComputePage/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { ThunkModuleToFunc, UseThunk } from "@chhsiao1981/use-thunk";
22
import { PageSection } from "@patternfly/react-core";
33
import { useEffect } from "react";
44
import type * as DoDrawer from "../../reducers/drawer";
5+
import type * as DoFeed from "../../reducers/feed";
56
import type * as DoUI from "../../reducers/ui";
67
import type * as DoUser from "../../reducers/user";
78
import Wrapper from "../Wrapper";
@@ -11,15 +12,17 @@ import Title from "./Title";
1112
type TDoUI = ThunkModuleToFunc<typeof DoUI>;
1213
type TDoUser = ThunkModuleToFunc<typeof DoUser>;
1314
type TDoDrawer = ThunkModuleToFunc<typeof DoDrawer>;
15+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
1416

1517
type Props = {
1618
useUI: UseThunk<DoUI.State, TDoUI>;
1719
useUser: UseThunk<DoUser.State, TDoUser>;
1820
useDrawer: UseThunk<DoDrawer.State, TDoDrawer>;
21+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
1922
};
2023

2124
export default (props: Props) => {
22-
const { useUI, useUser, useDrawer } = props;
25+
const { useUI, useUser, useDrawer, useFeed } = props;
2326

2427
useEffect(() => {
2528
document.title = "Compute Catalog";
@@ -30,6 +33,7 @@ export default (props: Props) => {
3033
useUI={useUI}
3134
useUser={useUser}
3235
useDrawer={useDrawer}
36+
useFeed={useFeed}
3337
title={Title}
3438
>
3539
<PageSection>

src/components/Dashboard/index.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
} from "@chhsiao1981/use-thunk";
2222
import { useNavigate } from "react-router";
2323
import type * as DoDrawer from "../../reducers/drawer";
24+
import type * as DoFeed from "../../reducers/feed";
2425
import type * as DoUI from "../../reducers/ui";
2526
import * as DoUser from "../../reducers/user";
2627
import Title from "./Title";
@@ -33,15 +34,17 @@ import {
3334
type TDoUI = ThunkModuleToFunc<typeof DoUI>;
3435
type TDoUser = ThunkModuleToFunc<typeof DoUser>;
3536
type TDoDrawer = ThunkModuleToFunc<typeof DoDrawer>;
37+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
3638

3739
type Props = {
3840
useUI: UseThunk<DoUI.State, TDoUI>;
3941
useUser: UseThunk<DoUser.State, TDoUser>;
4042
useDrawer: UseThunk<DoDrawer.State, TDoDrawer>;
43+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
4144
};
4245

4346
export default (props: Props) => {
44-
const { useUI, useUser, useDrawer } = props;
47+
const { useUI, useUser, useDrawer, useFeed } = props;
4548
const [classStateUser, _] = useUser;
4649
const user = getState(classStateUser) || DoUser.defaultState;
4750
const { isLoggedIn } = user;
@@ -63,6 +66,7 @@ export default (props: Props) => {
6366
useUI={useUI}
6467
useUser={useUser}
6568
useDrawer={useDrawer}
69+
useFeed={useFeed}
6670
>
6771
<PageSection>
6872
<Grid hasGutter>

src/components/FeedDetails/FeedNote.tsx

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,35 @@
1+
import {
2+
getState,
3+
type ThunkModuleToFunc,
4+
type UseThunk,
5+
} from "@chhsiao1981/use-thunk";
16
import { Button, Form, FormGroup, TextArea } from "@patternfly/react-core";
2-
import React, { useEffect } from "react";
7+
import { type ChangeEvent, useEffect, useState } from "react";
38
import { fetchNote } from "../../api/common";
4-
import { useAppSelector } from "../../store/hooks";
9+
import * as DoFeed from "../../reducers/feed";
510

6-
const FeedNote = () => {
7-
const [value, setValue] = React.useState("");
11+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
812

9-
const feed = useAppSelector((state) => state.feed.currentFeed.data);
13+
type Props = {
14+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
15+
};
16+
export default (props: Props) => {
17+
const { useFeed } = props;
18+
const [classStateFeed, _] = useFeed;
19+
const feedState = getState(classStateFeed) || DoFeed.defaultState;
20+
const { data: feed } = feedState;
21+
22+
const [value, setValue] = useState("");
1023

1124
useEffect(() => {
1225
fetchNote(feed).then((note) => {
1326
setValue(note?.data.content);
1427
});
1528
}, [feed]);
1629

17-
const [typing, setTyping] = React.useState(false);
30+
const [typing, setTyping] = useState(false);
1831
const handleChange = (
19-
_event: React.ChangeEvent<HTMLTextAreaElement>,
32+
_event: ChangeEvent<HTMLTextAreaElement>,
2033
value: string,
2134
) => {
2235
setValue(value);
@@ -78,5 +91,3 @@ const FeedNote = () => {
7891
</>
7992
);
8093
};
81-
82-
export default FeedNote;

src/components/FeedDetails/index.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Flex, FlexItem } from "@patternfly/react-core";
22
import { useEffect, useState } from "react";
33
import { fetchNote } from "../../api/common";
4-
import { useAppSelector } from "../../store/hooks";
54
import { Badge } from "../Antd";
65
import { ButtonWithTooltip } from "../Feeds/DrawerUtils";
76
import {
@@ -22,20 +21,26 @@ import {
2221
type UseThunk,
2322
} from "@chhsiao1981/use-thunk";
2423
import * as DoDrawer from "../../reducers/drawer";
24+
import * as DoFeed from "../../reducers/feed";
2525

2626
type TDoDrawer = ThunkModuleToFunc<typeof DoDrawer>;
27+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
2728

2829
type Props = {
2930
useDrawer: UseThunk<DoDrawer.State, TDoDrawer>;
31+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
3032
};
3133

3234
export default (props: Props) => {
33-
const { useDrawer } = props;
35+
const { useDrawer, useFeed } = props;
3436
const [classStateDrawer, doDrawer] = useDrawer;
3537
const drawerState = getState(classStateDrawer) || DoDrawer.defaultState;
3638
const drawerID = getRootID(classStateDrawer);
3739

38-
const currentFeed = useAppSelector((state) => state.feed.currentFeed.data);
40+
const [classStateFeed, _] = useFeed;
41+
const feedState = getState(classStateFeed) || DoFeed.defaultState;
42+
43+
const { data: currentFeed } = feedState;
3944

4045
const node = drawerState.node.currentlyActive === "node";
4146
const note = drawerState.node.currentlyActive === "note";

src/components/FeedOutputBrowser/FeedOutputBrowser.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import "./FeedOutputBrowser.css";
44
import type { ThunkModuleToFunc, UseThunk } from "@chhsiao1981/use-thunk";
55
import type * as DoDrawer from "../../reducers/drawer";
66
import type * as DoExplorer from "../../reducers/explorer";
7+
import type * as DoFeed from "../../reducers/feed";
78
import type * as DoUser from "../../reducers/user";
89
import { EmptyStateLoader } from "./EmptyStateLoader";
910
import FetchFilesLoader from "./FetchFilesLoader";
@@ -13,6 +14,7 @@ import { useFeedBrowser } from "./useFeedBrowser";
1314
type TDoUser = ThunkModuleToFunc<typeof DoUser>;
1415
type TDoDrawer = ThunkModuleToFunc<typeof DoDrawer>;
1516
type TDoExplorer = ThunkModuleToFunc<typeof DoExplorer>;
17+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
1618

1719
type Props = {
1820
handlePluginSelect: (node: PluginInstance) => void;
@@ -21,10 +23,11 @@ type Props = {
2123
useUser: UseThunk<DoUser.State, TDoUser>;
2224
useDrawer: UseThunk<DoDrawer.State, TDoDrawer>;
2325
useExplorer: UseThunk<DoExplorer.State, TDoExplorer>;
26+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
2427
};
2528

2629
export default (props: Props) => {
27-
const { useUser, useDrawer, useExplorer, statuses } = props;
30+
const { useUser, useDrawer, useExplorer, useFeed, statuses } = props;
2831
const {
2932
selected,
3033
pluginFilesPayload,
@@ -65,6 +68,7 @@ export default (props: Props) => {
6568
useUser={useUser}
6669
useDrawer={useDrawer}
6770
useExplorer={useExplorer}
71+
useFeed={useFeed}
6872
/>
6973
{!isHideError && <Alert type="error" description={error?.message} />}
7074
<EmptyStateLoader title="" isHide={isHideEmptyStateLoader} />

src/components/FeedOutputBrowser/FileBrowser.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ import { type CSSProperties, useEffect, useMemo, useRef } from "react";
2323
import { Panel, PanelGroup, PanelResizeHandle } from "react-resizable-panels";
2424
import * as DoDrawer from "../../reducers/drawer";
2525
import * as DoExplorer from "../../reducers/explorer";
26+
import * as DoFeed from "../../reducers/feed";
2627
import * as DoUser from "../../reducers/user";
27-
import useDownload, { useAppSelector } from "../../store/hooks";
28+
import useDownload from "../../store/hooks";
2829
import { notification } from "../Antd";
2930
import { ClipboardCopyContainer } from "../Common";
3031
import { DrawerActionButton } from "../Feeds/DrawerUtils";
@@ -49,6 +50,7 @@ import type { FilesPayload } from "./types";
4950
type TDoDrawer = ThunkModuleToFunc<typeof DoDrawer>;
5051
type TDoUser = ThunkModuleToFunc<typeof DoUser>;
5152
type TDoExplorer = ThunkModuleToFunc<typeof DoExplorer>;
53+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
5254

5355
const previewAnimation = [{ opacity: "0.0" }, { opacity: "1.0" }];
5456

@@ -77,6 +79,7 @@ type Props = {
7779
useDrawer: UseThunk<DoDrawer.State, TDoDrawer>;
7880
useUser: UseThunk<DoUser.State, TDoUser>;
7981
useExplorer: UseThunk<DoExplorer.State, TDoExplorer>;
82+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
8083
};
8184

8285
export default (props: Props) => {
@@ -94,6 +97,7 @@ export default (props: Props) => {
9497
useDrawer,
9598
useUser,
9699
useExplorer,
100+
useFeed,
97101
} = props;
98102

99103
const [classStateUser, _] = useUser;
@@ -109,7 +113,10 @@ export default (props: Props) => {
109113
const explorer = getState(classStateExplorer) || DoExplorer.defaultState;
110114
const { selectedFile } = explorer;
111115

112-
const feed = useAppSelector((state) => state.feed.currentFeed.data);
116+
const [classStateFeed, _2] = useFeed;
117+
const feedState = getState(classStateFeed) || DoFeed.defaultState;
118+
const { data: feed } = feedState;
119+
113120
const handleDownloadMutation = useDownload(feed);
114121
const [api, contextHolder] = notification.useNotification();
115122
const { isSuccess, isError, error: downloadError } = handleDownloadMutation;

src/components/FeedOutputBrowser/types.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import type {
44
FileBrowserFolderLinkFile,
55
FileBrowserFolderList,
66
} from "@fnndsc/chrisapi";
7-
import type { DataNode } from "../../store/explorer/types";
87

98
export interface FilesPayload {
109
filesMap?: FileBrowserFolderFile[];
@@ -25,13 +24,6 @@ export interface FilesPayload {
2524
};
2625
}
2726

28-
export interface FileBrowserState {
29-
directory: DataNode;
30-
breadcrumbs: DataNode[];
31-
currentFile: DataNode[];
32-
previewingFile?: DataNode; // file selected for preview
33-
}
34-
3527
export interface Label {
3628
[key: string]: boolean;
3729
}

src/components/FeedTree/FeedTree.css

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,11 @@
7070
}
7171

7272
.grabbable {
73-
cursor: move;
7473
cursor: grab;
75-
cursor: -moz-grab;
76-
cursor: -webkit-grab;
7774
}
7875

7976
.grabbable:active {
8077
cursor: grabbing;
81-
cursor: -moz-grabbing;
82-
cursor: -webkit-grabbing;
8378
}
8479

8580
.link {

src/components/Feeds/FeedListView.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import { useContext, useEffect, useMemo, useRef, useState } from "react";
3333
import { useMediaQuery } from "react-responsive";
3434
import { useNavigate } from "react-router";
3535
import type * as DoDrawer from "../../reducers/drawer";
36+
import type * as DoFeed from "../../reducers/feed";
3637
import type * as DoUI from "../../reducers/ui";
3738
import * as DoUser from "../../reducers/user";
3839
import { useAppSelector } from "../../store/hooks";
@@ -57,6 +58,7 @@ import {
5758
type TDoUI = ThunkModuleToFunc<typeof DoUI>;
5859
type TDoUser = ThunkModuleToFunc<typeof DoUser>;
5960
type TDoDrawer = ThunkModuleToFunc<typeof DoDrawer>;
61+
type TDoFeed = ThunkModuleToFunc<typeof DoFeed>;
6062

6163
const { Paragraph } = Typography;
6264

@@ -107,10 +109,11 @@ type Props = {
107109
useUI: UseThunk<DoUI.State, TDoUI>;
108110
useUser: UseThunk<DoUser.State, TDoUser>;
109111
useDrawer: UseThunk<DoDrawer.State, TDoDrawer>;
112+
useFeed: UseThunk<DoFeed.State, TDoFeed>;
110113
};
111114

112115
export default (props: Props) => {
113-
const { title, isShared, useUI, useUser, useDrawer } = props;
116+
const { title, isShared, useUI, useUser, useDrawer, useFeed } = props;
114117
const [classStateUser, _] = useUser;
115118
const user = getState(classStateUser) || DoUser.defaultState;
116119
const { isLoggedIn, username, isInit, isStaff } = user;
@@ -277,6 +280,7 @@ export default (props: Props) => {
277280
useUI={useUI}
278281
useUser={useUser}
279282
useDrawer={useDrawer}
283+
useFeed={useFeed}
280284
title={TitleComponent}
281285
>
282286
<PageSection

0 commit comments

Comments
 (0)