Skip to content

Commit 21585a8

Browse files
committed
Update examples to use readonly array
1 parent 8f5925a commit 21585a8

File tree

5 files changed

+30
-28
lines changed

5 files changed

+30
-28
lines changed

packages/docs-app/src/examples/select-examples/multiSelectExample.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ const INTENTS = [Intent.NONE, Intent.PRIMARY, Intent.SUCCESS, Intent.DANGER, Int
4040

4141
export interface MultiSelectExampleState {
4242
allowCreate: boolean;
43-
createdItems: Film[];
43+
createdItems: readonly Film[];
4444
disabled: boolean;
4545
fill: boolean;
46-
films: Film[];
46+
films: readonly Film[];
4747
hasInitialContent: boolean;
4848
intent: boolean;
49-
items: Film[];
49+
items: readonly Film[];
5050
matchTargetWidth: boolean;
5151
openOnKeyDown: boolean;
5252
popoverMinimal: boolean;
@@ -124,7 +124,7 @@ export class MultiSelectExample extends React.PureComponent<ExampleProps, MultiS
124124

125125
return (
126126
<Example options={this.renderOptions()} {...this.props}>
127-
<MultiSelect<Film>
127+
<MultiSelect
128128
{...flags}
129129
createNewItemFromQuery={allowCreate ? createFilms : undefined}
130130
createNewItemRenderer={allowCreate ? renderCreateFilmsMenuItem : null}
@@ -251,7 +251,9 @@ export class MultiSelectExample extends React.PureComponent<ExampleProps, MultiS
251251
);
252252
}
253253

254-
private renderCustomTarget = (selectedItems: Film[]) => <MultiSelectCustomTarget count={selectedItems.length} />;
254+
private renderCustomTarget = (selectedItems: readonly Film[]) => (
255+
<MultiSelectCustomTarget count={selectedItems.length} />
256+
);
255257

256258
private renderTag = (film: Film) => film.title;
257259

@@ -287,16 +289,16 @@ export class MultiSelectExample extends React.PureComponent<ExampleProps, MultiS
287289
this.selectFilms([film]);
288290
}
289291

290-
private selectFilms(filmsToSelect: Film[]) {
292+
private selectFilms(filmsToSelect: readonly Film[]) {
291293
this.setState(({ createdItems, films, items }) => {
292294
let nextCreatedItems = createdItems.slice();
293295
let nextFilms = films.slice();
294296
let nextItems = items.slice();
295297

296298
filmsToSelect.forEach(film => {
297299
const results = maybeAddCreatedFilmToArrays(nextItems, nextCreatedItems, film);
298-
nextItems = results.items;
299-
nextCreatedItems = results.createdItems;
300+
nextItems = results.items.slice();
301+
nextCreatedItems = results.createdItems.slice();
300302
// Avoid re-creating an item that is already selected (the "Create
301303
// Item" option will be shown even if it matches an already selected
302304
// item).
@@ -336,7 +338,7 @@ export class MultiSelectExample extends React.PureComponent<ExampleProps, MultiS
336338
}
337339
};
338340

339-
private handleFilmsPaste = (films: Film[]) => {
341+
private handleFilmsPaste = (films: readonly Film[]) => {
340342
// On paste, don't bother with deselecting already selected values, just
341343
// add the new ones.
342344
this.selectFilms(films);

packages/docs-app/src/examples/select-examples/omnibarExample.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export class OmnibarExample extends React.PureComponent<ExampleProps, OmnibarExa
9292
<KeyComboTag combo="shift + o" />
9393
</span>
9494

95-
<Omnibar<Film>
95+
<Omnibar
9696
{...this.state}
9797
createNewItemFromQuery={maybeCreateNewItemFromQuery}
9898
createNewItemRenderer={maybeCreateNewItemRenderer}

packages/docs-app/src/examples/select-examples/suggestExample.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ import {
3434
export interface SuggestExampleState {
3535
allowCreate: boolean;
3636
closeOnSelect: boolean;
37-
createdItems: Film[];
37+
createdItems: readonly Film[];
3838
disabled: boolean;
3939
fill: boolean;
40-
items: Film[];
40+
items: readonly Film[];
4141
matchTargetWidth: boolean;
4242
minimal: boolean;
4343
openOnKeyDown: boolean;
@@ -92,7 +92,7 @@ export class SuggestExample extends React.PureComponent<ExampleProps, SuggestExa
9292

9393
return (
9494
<Example options={this.renderOptions()} {...this.props}>
95-
<Suggest<Film>
95+
<Suggest
9696
{...flags}
9797
createNewItemFromQuery={maybeCreateNewItemFromQuery}
9898
createNewItemRenderer={maybeCreateNewItemRenderer}

packages/select/src/__examples__/filmSelect.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import {
3535
} from "./films";
3636

3737
type FilmSelectProps = Omit<
38-
SelectProps<Film>,
38+
SelectProps<Film, readonly Film[]>,
3939
| "createNewItemFromQuery"
4040
| "createNewItemRenderer"
4141
| "itemPredicate"
@@ -49,8 +49,8 @@ type FilmSelectProps = Omit<
4949
};
5050

5151
export function FilmSelect({ allowCreate = false, fill, ...restProps }: FilmSelectProps) {
52-
const [items, setItems] = React.useState([...TOP_100_FILMS]);
53-
const [createdItems, setCreatedItems] = React.useState<Film[]>([]);
52+
const [items, setItems] = React.useState<readonly Film[]>([...TOP_100_FILMS]);
53+
const [createdItems, setCreatedItems] = React.useState<readonly Film[]>([]);
5454
const [selectedFilm, setSelectedFilm] = React.useState<Film | undefined>(undefined);
5555
const handleItemSelect = React.useCallback(
5656
(newFilm: Film) => {
@@ -82,7 +82,7 @@ export function FilmSelect({ allowCreate = false, fill, ...restProps }: FilmSele
8282
);
8383

8484
return (
85-
<Select<Film>
85+
<Select
8686
createNewItemFromQuery={allowCreate ? createFilm : undefined}
8787
createNewItemRenderer={allowCreate ? renderCreateFilmMenuItem : undefined}
8888
fill={fill}

packages/select/src/__examples__/films.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export interface Film {
3030
}
3131

3232
/** Top 100 films as rated by IMDb users. http://www.imdb.com/chart/top */
33-
export const TOP_100_FILMS: Film[] = [
33+
export const TOP_100_FILMS: readonly Film[] = [
3434
{ title: "The Shawshank Redemption", year: 1994 },
3535
{ title: "The Godfather", year: 1972 },
3636
{ title: "The Godfather: Part II", year: 1974 },
@@ -270,7 +270,7 @@ export function createFilm(title: string): Film {
270270
};
271271
}
272272

273-
export function createFilms(query: string): Film[] {
273+
export function createFilms(query: string): readonly Film[] {
274274
const titles = query.split(", ");
275275
return titles.map((title, index) => ({
276276
rank: 100 + Math.floor(Math.random() * 100 + index),
@@ -288,23 +288,23 @@ export function doesFilmEqualQuery(film: Film, query: string) {
288288
return film.title.toLowerCase() === query.toLowerCase();
289289
}
290290

291-
export function arrayContainsFilm(films: Film[], filmToFind: Film): boolean {
291+
export function arrayContainsFilm(films: readonly Film[], filmToFind: Film): boolean {
292292
return films.some((film: Film) => film.title === filmToFind.title);
293293
}
294294

295-
export function addFilmToArray(films: Film[], filmToAdd: Film) {
295+
export function addFilmToArray(films: readonly Film[], filmToAdd: Film): readonly Film[] {
296296
return [...films, filmToAdd];
297297
}
298298

299-
export function deleteFilmFromArray(films: Film[], filmToDelete: Film) {
299+
export function deleteFilmFromArray(films: readonly Film[], filmToDelete: Film): readonly Film[] {
300300
return films.filter(film => film !== filmToDelete);
301301
}
302302

303303
export function maybeAddCreatedFilmToArrays(
304-
items: Film[],
305-
createdItems: Film[],
304+
items: readonly Film[],
305+
createdItems: readonly Film[],
306306
film: Film,
307-
): { createdItems: Film[]; items: Film[] } {
307+
): { createdItems: readonly Film[]; items: readonly Film[] } {
308308
const isNewlyCreatedItem = !arrayContainsFilm(items, film);
309309
return {
310310
createdItems: isNewlyCreatedItem ? addFilmToArray(createdItems, film) : createdItems,
@@ -314,10 +314,10 @@ export function maybeAddCreatedFilmToArrays(
314314
}
315315

316316
export function maybeDeleteCreatedFilmFromArrays(
317-
items: Film[],
318-
createdItems: Film[],
317+
items: readonly Film[],
318+
createdItems: readonly Film[],
319319
film: Film | undefined,
320-
): { createdItems: Film[]; items: Film[] } {
320+
): { createdItems: readonly Film[]; items: readonly Film[] } {
321321
if (film === undefined) {
322322
return {
323323
createdItems,

0 commit comments

Comments
 (0)