mirror of
https://github.com/LemmyNet/lemmy-ui.git
synced 2024-11-25 22:01:13 +00:00
Adding async community searching. Fixes #262
This commit is contained in:
parent
331861b247
commit
7858c17d3b
6 changed files with 59 additions and 11 deletions
|
@ -68,7 +68,7 @@
|
||||||
"eslint-plugin-prettier": "^3.3.1",
|
"eslint-plugin-prettier": "^3.3.1",
|
||||||
"husky": "^6.0.0",
|
"husky": "^6.0.0",
|
||||||
"iso-639-1": "^2.1.9",
|
"iso-639-1": "^2.1.9",
|
||||||
"lemmy-js-client": "0.11.0-rc.8",
|
"lemmy-js-client": "0.11.0-rc.9",
|
||||||
"lint-staged": "^10.5.4",
|
"lint-staged": "^10.5.4",
|
||||||
"mini-css-extract-plugin": "^1.4.1",
|
"mini-css-extract-plugin": "^1.4.1",
|
||||||
"node-fetch": "^2.6.1",
|
"node-fetch": "^2.6.1",
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { HtmlTags } from "./html-tags";
|
||||||
import { Spinner } from "./icon";
|
import { Spinner } from "./icon";
|
||||||
import {
|
import {
|
||||||
authField,
|
authField,
|
||||||
|
fetchLimit,
|
||||||
isBrowser,
|
isBrowser,
|
||||||
setIsoData,
|
setIsoData,
|
||||||
setOptionalAuth,
|
setOptionalAuth,
|
||||||
|
@ -69,7 +70,7 @@ export class CreatePost extends Component<any, CreatePostState> {
|
||||||
let listCommunitiesForm: ListCommunities = {
|
let listCommunitiesForm: ListCommunities = {
|
||||||
type_: ListingType.All,
|
type_: ListingType.All,
|
||||||
sort: SortType.TopAll,
|
sort: SortType.TopAll,
|
||||||
limit: 9999,
|
limit: fetchLimit,
|
||||||
auth: authField(false),
|
auth: authField(false),
|
||||||
};
|
};
|
||||||
WebSocketService.Instance.send(
|
WebSocketService.Instance.send(
|
||||||
|
@ -163,7 +164,7 @@ export class CreatePost extends Component<any, CreatePostState> {
|
||||||
let listCommunitiesForm: ListCommunities = {
|
let listCommunitiesForm: ListCommunities = {
|
||||||
type_: ListingType.All,
|
type_: ListingType.All,
|
||||||
sort: SortType.TopAll,
|
sort: SortType.TopAll,
|
||||||
limit: 9999,
|
limit: fetchLimit,
|
||||||
};
|
};
|
||||||
setOptionalAuth(listCommunitiesForm, req.auth);
|
setOptionalAuth(listCommunitiesForm, req.auth);
|
||||||
return [req.client.listCommunities(listCommunitiesForm)];
|
return [req.client.listCommunities(listCommunitiesForm)];
|
||||||
|
|
|
@ -16,6 +16,7 @@ import {
|
||||||
SearchType,
|
SearchType,
|
||||||
SearchResponse,
|
SearchResponse,
|
||||||
ListingType,
|
ListingType,
|
||||||
|
LemmyHttp,
|
||||||
} from "lemmy-js-client";
|
} from "lemmy-js-client";
|
||||||
import { WebSocketService, UserService } from "../services";
|
import { WebSocketService, UserService } from "../services";
|
||||||
import { PostFormParams } from "../interfaces";
|
import { PostFormParams } from "../interfaces";
|
||||||
|
@ -37,6 +38,8 @@ import {
|
||||||
wsUserOp,
|
wsUserOp,
|
||||||
wsClient,
|
wsClient,
|
||||||
authField,
|
authField,
|
||||||
|
communityToChoice,
|
||||||
|
fetchLimit,
|
||||||
} from "../utils";
|
} from "../utils";
|
||||||
import autosize from "autosize";
|
import autosize from "autosize";
|
||||||
|
|
||||||
|
@ -46,7 +49,7 @@ if (isBrowser()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
import { i18n } from "../i18next";
|
import { i18n } from "../i18next";
|
||||||
import { pictrsUri } from "../env";
|
import { httpBase, pictrsUri } from "../env";
|
||||||
|
|
||||||
const MAX_POST_TITLE_LENGTH = 200;
|
const MAX_POST_TITLE_LENGTH = 200;
|
||||||
|
|
||||||
|
@ -453,6 +456,20 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
this.setState(this.state);
|
this.setState(this.state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fetchCommunities(q: string) {
|
||||||
|
let form: Search = {
|
||||||
|
q,
|
||||||
|
type_: SearchType.Communities,
|
||||||
|
sort: SortType.TopAll,
|
||||||
|
listing_type: ListingType.All,
|
||||||
|
page: 1,
|
||||||
|
limit: fetchLimit,
|
||||||
|
auth: authField(false),
|
||||||
|
};
|
||||||
|
let client = new LemmyHttp(httpBase);
|
||||||
|
return client.search(form);
|
||||||
|
}
|
||||||
|
|
||||||
handlePostBodyChange(val: string) {
|
handlePostBodyChange(val: string) {
|
||||||
this.state.postForm.body = val;
|
this.state.postForm.body = val;
|
||||||
this.setState(this.state);
|
this.setState(this.state);
|
||||||
|
@ -578,6 +595,20 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
},
|
},
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
|
this.choices.passedElement.element.addEventListener(
|
||||||
|
"search",
|
||||||
|
debounce(async (e: any) => {
|
||||||
|
let communities = (await this.fetchCommunities(e.detail.value))
|
||||||
|
.communities;
|
||||||
|
this.choices.setChoices(
|
||||||
|
communities.map(cv => communityToChoice(cv)),
|
||||||
|
"value",
|
||||||
|
"label",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}, 400),
|
||||||
|
false
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,7 +672,6 @@ export class PostForm extends Component<PostFormProps, PostFormState> {
|
||||||
} else if (data.type_ == SearchType[SearchType.Url]) {
|
} else if (data.type_ == SearchType[SearchType.Url]) {
|
||||||
this.state.crossPosts = data.posts;
|
this.state.crossPosts = data.posts;
|
||||||
}
|
}
|
||||||
this.setState(this.state);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { Prompt } from "inferno-router";
|
||||||
import { MarkdownTextArea } from "./markdown-textarea";
|
import { MarkdownTextArea } from "./markdown-textarea";
|
||||||
import { Spinner } from "./icon";
|
import { Spinner } from "./icon";
|
||||||
import { ImageUploadForm } from "./image-upload-form";
|
import { ImageUploadForm } from "./image-upload-form";
|
||||||
import { Site, EditSite } from "lemmy-js-client";
|
import { Site, EditSite, CreateSite } from "lemmy-js-client";
|
||||||
import { WebSocketService } from "../services";
|
import { WebSocketService } from "../services";
|
||||||
import {
|
import {
|
||||||
authField,
|
authField,
|
||||||
|
@ -250,7 +250,11 @@ export class SiteForm extends Component<SiteFormProps, SiteFormState> {
|
||||||
if (i.props.site) {
|
if (i.props.site) {
|
||||||
WebSocketService.Instance.send(wsClient.editSite(i.state.siteForm));
|
WebSocketService.Instance.send(wsClient.editSite(i.state.siteForm));
|
||||||
} else {
|
} else {
|
||||||
WebSocketService.Instance.send(wsClient.createSite(i.state.siteForm));
|
let form: CreateSite = {
|
||||||
|
name: i.state.siteForm.name || "My site",
|
||||||
|
...i.state.siteForm,
|
||||||
|
};
|
||||||
|
WebSocketService.Instance.send(wsClient.createSite(form));
|
||||||
}
|
}
|
||||||
i.setState(i.state);
|
i.setState(i.state);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1232,3 +1232,16 @@ export function restoreScrollPosition(context: any) {
|
||||||
export function showLocal(isoData: IsoData): boolean {
|
export function showLocal(isoData: IsoData): boolean {
|
||||||
return isoData.site_res.federated_instances?.linked.length > 0;
|
return isoData.site_res.federated_instances?.linked.length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ChoicesValue {
|
||||||
|
value: string;
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function communityToChoice(cv: CommunityView): ChoicesValue {
|
||||||
|
let choice: ChoicesValue = {
|
||||||
|
value: cv.community.id.toString(),
|
||||||
|
label: cv.community.name,
|
||||||
|
};
|
||||||
|
return choice;
|
||||||
|
}
|
||||||
|
|
|
@ -5125,10 +5125,10 @@ lcid@^1.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
invert-kv "^1.0.0"
|
invert-kv "^1.0.0"
|
||||||
|
|
||||||
lemmy-js-client@0.11.0-rc.8:
|
lemmy-js-client@0.11.0-rc.9:
|
||||||
version "0.11.0-rc.8"
|
version "0.11.0-rc.9"
|
||||||
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.0-rc.8.tgz#d3b15b7233cf0cd493c5d8a3c8a588b9ce0c2663"
|
resolved "https://registry.yarnpkg.com/lemmy-js-client/-/lemmy-js-client-0.11.0-rc.9.tgz#f8b1e3924388c6e7f719f052ba1568f4d210cabc"
|
||||||
integrity sha512-YlG0bkJuWEkBdCoS5RROxz7RyE0zgsTt0emiNTYdE8vFLr3DBPha/19Rzccx8Ewc7ohH35w8gg3XDejcrK0tqw==
|
integrity sha512-697hLvHPr5+ZkJkFTaXl3y7Dt1va2Dghx9uvu/kZyZQZGVk2lL10R50SDaWsThyQKFBT4kiS1JZI+R3szzZEZQ==
|
||||||
|
|
||||||
levn@^0.4.1:
|
levn@^0.4.1:
|
||||||
version "0.4.1"
|
version "0.4.1"
|
||||||
|
|
Loading…
Reference in a new issue