add api react library
This commit is contained in:
parent
4f6025759f
commit
3fab933f8c
@ -21,11 +21,11 @@ func Init() {
|
|||||||
AddActorsHandlers()
|
AddActorsHandlers()
|
||||||
AddTvshowHandlers()
|
AddTvshowHandlers()
|
||||||
|
|
||||||
gws.AddAPINode("video", VideoNode)
|
gws.AddAPINode("video", VideoNode, true)
|
||||||
gws.AddAPINode("tags", TagNode)
|
gws.AddAPINode("tags", TagNode, true)
|
||||||
gws.AddAPINode("settings", SettingsNode)
|
gws.AddAPINode("settings", SettingsNode, true)
|
||||||
gws.AddAPINode("actor", ActorNode)
|
gws.AddAPINode("actor", ActorNode, true)
|
||||||
gws.AddAPINode("tvshow", TVShowNode)
|
gws.AddAPINode("tvshow", TVShowNode, true)
|
||||||
|
|
||||||
// serverinit is blocking
|
// serverinit is blocking
|
||||||
gws.ServerInit(func(id string) (oauth.CustomClientInfo, error) {
|
gws.ServerInit(func(id string) (oauth.CustomClientInfo, error) {
|
||||||
|
@ -4,6 +4,6 @@ go 1.16
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/gowebsecure/goWebSecure-go v0.1.0-beta.0
|
github.com/gowebsecure/goWebSecure-go v0.1.0-beta.1
|
||||||
nhooyr.io/websocket v1.8.7
|
nhooyr.io/websocket v1.8.7
|
||||||
)
|
)
|
||||||
|
@ -45,8 +45,8 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGa
|
|||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
|
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
|
||||||
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/gowebsecure/goWebSecure-go v0.1.0-beta.0 h1:sRtAUayLicrau6qYD6gBpnXpmpz5pkbOJsHk3vy18LU=
|
github.com/gowebsecure/goWebSecure-go v0.1.0-beta.1 h1:lMaNWyk5udtOAc8U+mUo2FTgNqRwT+Aj5mxDfP5qtx0=
|
||||||
github.com/gowebsecure/goWebSecure-go v0.1.0-beta.0/go.mod h1:uEM+/1LS6hSBby7VKx2cHZ9btvQ/LC4K3HWKgqDRPs0=
|
github.com/gowebsecure/goWebSecure-go v0.1.0-beta.1/go.mod h1:uEM+/1LS6hSBby7VKx2cHZ9btvQ/LC4K3HWKgqDRPs0=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk=
|
github.com/imkira/go-interpol v1.1.0 h1:KIiKr0VSG2CUW1hl1jpiyuzuJeKUUpC8iM1AIE7N1Vk=
|
||||||
github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
|
github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA=
|
||||||
|
@ -20,7 +20,8 @@
|
|||||||
"react-router": "^5.2.0",
|
"react-router": "^5.2.0",
|
||||||
"react-router-dom": "^5.2.0",
|
"react-router-dom": "^5.2.0",
|
||||||
"typescript": "^4.3.5",
|
"typescript": "^4.3.5",
|
||||||
"gowebsecure": "0.1.1-beta.2"
|
"gowebsecure": "0.1.1-beta.2",
|
||||||
|
"gowebsecure-react": "0.1.0-beta.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
@ -39,7 +40,7 @@
|
|||||||
"text-summary"
|
"text-summary"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"proxy": "http://127.0.0.1:8081",
|
"proxy": "http://127.0.0.1:8080",
|
||||||
"homepage": "/",
|
"homepage": "/",
|
||||||
"browserslist": {
|
"browserslist": {
|
||||||
"production": [
|
"production": [
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import {callAPI} from 'gowebsecure';
|
|
||||||
|
|
||||||
interface Props<T> {
|
|
||||||
onLoad?: JSX.Element;
|
|
||||||
render: (data: T, actions: {refresh: () => void}) => JSX.Element;
|
|
||||||
node: string;
|
|
||||||
action: string;
|
|
||||||
params?: {[_: string]: string | number | boolean | object};
|
|
||||||
}
|
|
||||||
|
|
||||||
interface State {
|
|
||||||
loaded: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class APIComponent<T> extends React.Component<Props<T>, State> {
|
|
||||||
state = {
|
|
||||||
loaded: false
|
|
||||||
};
|
|
||||||
|
|
||||||
data: T | undefined;
|
|
||||||
|
|
||||||
render(): JSX.Element {
|
|
||||||
if (this.state.loaded && this.data !== undefined) {
|
|
||||||
return this.props.render(this.data, {refresh: () => this.loadData()});
|
|
||||||
} else {
|
|
||||||
return this.props.onLoad ? this.props.onLoad : <></>;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidMount(): void {
|
|
||||||
this.loadData();
|
|
||||||
}
|
|
||||||
|
|
||||||
componentDidUpdate(prevProps: Readonly<Props<T>>): void {
|
|
||||||
if (prevProps.params !== this.props.params) {
|
|
||||||
this.loadData();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private loadData(): void {
|
|
||||||
this.setState({loaded: false});
|
|
||||||
callAPI(this.props.node, {action: this.props.action, ...this.props.params}, (result: T) => {
|
|
||||||
this.data = result;
|
|
||||||
this.setState({loaded: true});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,8 +12,8 @@ import {APINode, VideoTypes} from '../../types/ApiTypes';
|
|||||||
import {DefaultTags} from '../../types/GeneralTypes';
|
import {DefaultTags} from '../../types/GeneralTypes';
|
||||||
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
import {faSortDown} from '@fortawesome/free-solid-svg-icons';
|
import {faSortDown} from '@fortawesome/free-solid-svg-icons';
|
||||||
import APIComponent from '../../elements/APIComponent';
|
|
||||||
import {TagType} from '../../types/VideoTypes';
|
import {TagType} from '../../types/VideoTypes';
|
||||||
|
import {APILoader} from 'gowebsecure-react';
|
||||||
|
|
||||||
// eslint-disable-next-line no-shadow
|
// eslint-disable-next-line no-shadow
|
||||||
export enum SortBy {
|
export enum SortBy {
|
||||||
@ -54,7 +54,7 @@ export class HomePage extends React.Component<Props, state> {
|
|||||||
<SearchHandling />
|
<SearchHandling />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path='/'>
|
<Route path='/'>
|
||||||
<APIComponent
|
<APILoader
|
||||||
render={(data: {Videos: VideoTypes.VideoUnloadedType[]; TagName: string}): JSX.Element => (
|
render={(data: {Videos: VideoTypes.VideoUnloadedType[]; TagName: string}): JSX.Element => (
|
||||||
<>
|
<>
|
||||||
<PageTitle title='Home Page' subtitle={this.state.subtitle + ' - ' + data.Videos.length}>
|
<PageTitle title='Home Page' subtitle={this.state.subtitle + ' - ' + data.Videos.length}>
|
||||||
@ -79,7 +79,7 @@ export class HomePage extends React.Component<Props, state> {
|
|||||||
</form>
|
</form>
|
||||||
</PageTitle>
|
</PageTitle>
|
||||||
<SideBar>
|
<SideBar>
|
||||||
<APIComponent
|
<APILoader
|
||||||
render={(sidebardata: VideoTypes.startDataType): JSX.Element => (
|
render={(sidebardata: VideoTypes.startDataType): JSX.Element => (
|
||||||
<>
|
<>
|
||||||
<SideBarTitle>Infos:</SideBarTitle>
|
<SideBarTitle>Infos:</SideBarTitle>
|
||||||
|
@ -6,8 +6,8 @@ import PageTitle from '../../elements/PageTitle/PageTitle';
|
|||||||
import VideoContainer from '../../elements/VideoContainer/VideoContainer';
|
import VideoContainer from '../../elements/VideoContainer/VideoContainer';
|
||||||
import {TagType} from '../../types/VideoTypes';
|
import {TagType} from '../../types/VideoTypes';
|
||||||
import {APINode, VideoTypes} from '../../types/ApiTypes';
|
import {APINode, VideoTypes} from '../../types/ApiTypes';
|
||||||
import APIComponent from '../../elements/APIComponent';
|
|
||||||
import KeyComponent from '../../elements/KeyComponent';
|
import KeyComponent from '../../elements/KeyComponent';
|
||||||
|
import {APILoader} from 'gowebsecure-react';
|
||||||
|
|
||||||
interface GetRandomMoviesType {
|
interface GetRandomMoviesType {
|
||||||
Videos: VideoTypes.VideoUnloadedType[];
|
Videos: VideoTypes.VideoUnloadedType[];
|
||||||
@ -24,7 +24,7 @@ class RandomPage extends React.Component {
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<PageTitle title='Random Videos' subtitle={this.LoadNR + 'pcs'} />
|
<PageTitle title='Random Videos' subtitle={this.LoadNR + 'pcs'} />
|
||||||
<APIComponent
|
<APILoader
|
||||||
render={(data: GetRandomMoviesType, actions): JSX.Element => (
|
render={(data: GetRandomMoviesType, actions): JSX.Element => (
|
||||||
<KeyComponent listenKey='s' onKey={actions.refresh}>
|
<KeyComponent listenKey='s' onKey={actions.refresh}>
|
||||||
<SideBar>
|
<SideBar>
|
||||||
|
@ -6049,6 +6049,11 @@ got@^9.6.0:
|
|||||||
to-readable-stream "^1.0.0"
|
to-readable-stream "^1.0.0"
|
||||||
url-parse-lax "^3.0.0"
|
url-parse-lax "^3.0.0"
|
||||||
|
|
||||||
|
gowebsecure-react@0.1.0-beta.3:
|
||||||
|
version "0.1.0-beta.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/gowebsecure-react/-/gowebsecure-react-0.1.0-beta.3.tgz#f614761c6d31550718d5455b219065f7dafd7664"
|
||||||
|
integrity sha512-8Vefh/VGuJIjcD0LbMcbmAv33DhyVALxgz2j8N5Q2Hjpvm6R20CIt2xRtJeHFDqbXcmfn2Z6rda0yQJ/6OFi6g==
|
||||||
|
|
||||||
gowebsecure@0.1.1-beta.2:
|
gowebsecure@0.1.1-beta.2:
|
||||||
version "0.1.1-beta.2"
|
version "0.1.1-beta.2"
|
||||||
resolved "https://registry.yarnpkg.com/gowebsecure/-/gowebsecure-0.1.1-beta.2.tgz#3b9aaa1f83af9a7c2423da8e0ee605dc018d463b"
|
resolved "https://registry.yarnpkg.com/gowebsecure/-/gowebsecure-0.1.1-beta.2.tgz#3b9aaa1f83af9a7c2423da8e0ee605dc018d463b"
|
||||||
|
Loading…
Reference in New Issue
Block a user