@@ -12,7 +12,9 @@ Just define your **Data models** & **Client HTTP methods**, then leave rest of t
1212
1313## Usage
1414
15- ### ` model/client.ts `
15+ ### Simple List
16+
17+ #### ` model/client.ts `
1618
1719``` javascript
1820import { HTTPClient } from ' koajax' ;
@@ -23,7 +25,7 @@ export const client = new HTTPClient({
2325});
2426```
2527
26- ### ` model/Repository.ts `
28+ #### ` model/Repository.ts `
2729
2830``` typescript
2931import { buildURLData } from ' web-utility' ;
@@ -37,7 +39,7 @@ export class RepositoryModel extends ListModel<Repository> {
3739 client = client ;
3840 baseURI = ' orgs/idea2app/repos' ;
3941
40- async loadPage(page : number , per_page : number ) {
42+ protected async loadPage(page : number , per_page : number ) {
4143 const { body } = await this .client .get <Repository []>(
4244 ` ${this .baseURI }?${buildURLData ({ page , per_page })} `
4345 );
@@ -48,7 +50,7 @@ export class RepositoryModel extends ListModel<Repository> {
4850export default new RepositoryModel ();
4951```
5052
51- ### ` page/Repository.tsx `
53+ #### ` page/Repository.tsx `
5254
5355Use [ WebCell] [ 6 ] as an Example
5456
@@ -88,6 +90,89 @@ export class RepositoryPage extends WebCell() {
8890}
8991```
9092
93+ ### Preload List
94+
95+ #### ` model/Repository.ts `
96+
97+ ``` diff
98+ import { buildURLData } from 'web-utility';
99+ - import { ListModel } from 'mobx-restful';
100+ + import { BufferListModel } from 'mobx-restful';
101+
102+ import { client } from './client';
103+
104+ export type Repository = Record<'full_name' | 'html_url', string>;
105+
106+ - export class RepositoryModel extends ListModel<Repository> {
107+ + export class RepositoryModel extends BufferListModel<Repository>() {
108+ client = client;
109+ baseURI = 'orgs/idea2app/repos';
110+
111+ protected async loadPage(page: number, per_page: number) {
112+ const { body } = await this.client.get<Repository[]>(
113+ `${this.baseURI}?${buildURLData({ page, per_page })}`
114+ );
115+ return { pageData: body };
116+ }
117+ }
118+
119+ export default new RepositoryModel();
120+ ```
121+
122+ ### Multiple Source List
123+
124+ #### ` model/Repository.ts `
125+
126+ ``` diff
127+ - import { buildURLData } from 'web-utility';
128+ + import { buildURLData, mergeStream } from 'web-utility';
129+ - import { ListModel } from 'mobx-restful';
130+ + import { StreamListModel } from 'mobx-restful';
131+
132+ import { client } from './client';
133+
134+ export type Repository = Record<'full_name' | 'html_url', string>;
135+
136+ - export class RepositoryModel extends ListModel<Repository> {
137+ + export class RepositoryModel extends StreamListModel<Repository>() {
138+ client = client;
139+ - baseURI = 'orgs/idea2app/repos';
140+
141+ - protected async loadPage(page: number, per_page: number) {
142+ - const { body } = await this.client.get<Repository[]>(
143+ - `${this.baseURI}?${buildURLData({ page, per_page })}`
144+ - );
145+ - return { pageData: body };
146+ - }
147+ + protected openStream() {
148+ + return mergeStream(
149+ + async function* () {
150+ + for (let i = 1; ; i++) {
151+ + const { body } = await client.get<Repository[]>(
152+ + 'orgs/idea2app/repos?page=' + i
153+ + );
154+ + if (!body[0]) break;
155+ +
156+ + yield* body;
157+ + }
158+ + },
159+ + async function* () {
160+ + for (let i = 1; ; i++) {
161+ + const { body } = await client.get<Repository[]>(
162+ + 'users/TechQuery/repos?page=' + i
163+ + );
164+ + if (!body[0]) break;
165+ +
166+ + yield* body;
167+ + }
168+ + }
169+ + );
170+ + }
171+ }
172+
173+ export default new RepositoryModel();
174+ ```
175+
91176## Scaffold
92177
93178- Progressive Web App (React): https://github.com/idea2app/React-MobX-Bootstrap-ts
0 commit comments