Browse Source

search query paging

dev
xmcp 6 years ago
parent
commit
11b1f9079b
  1. 14
      src/Flows.js
  2. 6
      src/UserAction.js
  3. 13
      src/flows_api.js

14
src/Flows.js

@ -13,7 +13,6 @@ import {API, PKUHELPER_ROOT} from './flows_api';
const IMAGE_BASE=PKUHELPER_ROOT+'services/pkuhole/images/'; const IMAGE_BASE=PKUHELPER_ROOT+'services/pkuhole/images/';
const AUDIO_BASE=PKUHELPER_ROOT+'services/pkuhole/audios/'; const AUDIO_BASE=PKUHELPER_ROOT+'services/pkuhole/audios/';
const SEARCH_PAGESIZE=50;
const CLICKABLE_TAGS={a: true, audio: true}; const CLICKABLE_TAGS={a: true, audio: true};
const PREVIEW_REPLY_COUNT=10; const PREVIEW_REPLY_COUNT=10;
const QUOTE_BLACKLIST=['23333','233333','66666','666666','10086','10000','100000','99999','999999','55555','555555']; const QUOTE_BLACKLIST=['23333','233333','66666','666666','10086','10000','100000','99999','999999','55555','555555'];
@ -711,17 +710,20 @@ export class Flow extends PureComponent {
}) })
.catch(failed); .catch(failed);
} else if(this.state.mode==='search') { } else if(this.state.mode==='search') {
API.get_search(SEARCH_PAGESIZE*page,this.state.search_param,this.props.token) API.get_search(page,this.state.search_param,this.props.token)
.then((json)=>{ .then((json)=>{
const finished=json.data.length<SEARCH_PAGESIZE; const finished=json.data.length===0;
this.setState({ this.setState((prev,props)=>({
chunks: { chunks: {
title: 'Result for "'+this.state.search_param+'"', title: 'Result for "'+this.state.search_param+'"',
data: json.data, data: prev.chunks.data.concat(json.data.filter((x)=>(
prev.chunks.data.length===0 ||
!(prev.chunks.data.slice(-100).some((p)=>p.pid===x.pid))
))),
}, },
mode: finished ? 'search_finished' : 'search', mode: finished ? 'search_finished' : 'search',
loading_status: 'done', loading_status: 'done',
}); }));
}) })
.catch(failed); .catch(failed);
} else if(this.state.mode==='single') { } else if(this.state.mode==='single') {

6
src/UserAction.js

@ -2,7 +2,7 @@ import React, {Component, PureComponent} from 'react';
import copy from 'copy-to-clipboard'; import copy from 'copy-to-clipboard';
import {API_BASE,SafeTextarea} from './Common'; import {API_BASE,SafeTextarea} from './Common';
import {MessageViewer} from './Message'; import {MessageViewer} from './Message';
import {API_VERSION_PARAM,PKUHELPER_ROOT,API,get_json} from './flows_api'; import {API_VERSION_PARAM, PKUHELPER_ROOT, API, get_json, token_param} from './flows_api';
import './UserAction.css'; import './UserAction.css';
@ -301,7 +301,7 @@ export class ReplyForm extends Component {
data.append('pid',this.props.pid); data.append('pid',this.props.pid);
data.append('text',this.state.text); data.append('text',this.state.text);
data.append('user_token',this.props.token); data.append('user_token',this.props.token);
fetch(API_BASE+'/api.php?action=docomment'+API_VERSION_PARAM(), { fetch(API_BASE+'/api.php?action=docomment'+token_param(this.props.token), {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
@ -381,7 +381,7 @@ export class PostForm extends Component {
if(img) if(img)
data.append('data',img); data.append('data',img);
fetch(API_BASE+'/api.php?action=dopost'+API_VERSION_PARAM(), { fetch(API_BASE+'/api.php?action=dopost'+token_param(this.props.token), {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',

13
src/flows_api.js

@ -8,12 +8,14 @@ export function API_VERSION_PARAM() {
} }
export {PKUHELPER_ROOT}; export {PKUHELPER_ROOT};
function token_param(token) { export function token_param(token) {
return API_VERSION_PARAM()+(token ? ('&user_token='+token) : ''); return API_VERSION_PARAM()+(token ? ('&user_token='+token) : '');
} }
export {get_json}; export {get_json};
const SEARCH_PAGESIZE=50;
export const API={ export const API={
load_replies: (pid,token,color_picker,cache_version)=>{ load_replies: (pid,token,color_picker,cache_version)=>{
pid=parseInt(pid); pid=parseInt(pid);
@ -74,7 +76,7 @@ export const API={
data.append('user_token',token); data.append('user_token',token);
data.append('pid',pid); data.append('pid',pid);
data.append('switch',attention ? '1' : '0'); data.append('switch',attention ? '1' : '0');
return fetch(API_BASE+'/api.php?action=attention'+API_VERSION_PARAM(), { return fetch(API_BASE+'/api.php?action=attention'+token_param(token), {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
@ -99,7 +101,7 @@ export const API={
data.append('user_token',token); data.append('user_token',token);
data.append('pid',pid); data.append('pid',pid);
data.append('reason',reason); data.append('reason',reason);
return fetch(API_BASE+'/api.php?action=report'+API_VERSION_PARAM(), { return fetch(API_BASE+'/api.php?action=report'+token_param(token), {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/x-www-form-urlencoded', 'Content-Type': 'application/x-www-form-urlencoded',
@ -130,10 +132,11 @@ export const API={
}); });
}, },
get_search: (pagesize,keyword,token)=>{ get_search: (page,keyword,token)=>{
return fetch( return fetch(
API_BASE+'/api.php?action=search'+ API_BASE+'/api.php?action=search'+
'&pagesize='+pagesize+ '&pagesize='+SEARCH_PAGESIZE+
'&page='+page+
'&keywords='+encodeURIComponent(keyword)+ '&keywords='+encodeURIComponent(keyword)+
token_param(token) token_param(token)
) )

Loading…
Cancel
Save