Skip to content

Commit

Permalink
Update plex extension (#13476)
Browse files Browse the repository at this point in the history
* Update plex extension

- fix: search functionality
- Initial commit

* refactor: rm excess state and fix lowercase filter

* Update plex extension

- refactor: filter performance
- Initial commit

* docs: filter refactored

* Update CHANGELOG.md and optimise images

---------

Co-authored-by: raycastbot <bot@raycast.com>
  • Loading branch information
owain-williams and raycastbot committed Jul 16, 2024
1 parent 98c102b commit b3f3fc4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 27 deletions.
4 changes: 4 additions & 0 deletions extensions/plex/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Plex Changelog

## [New Features] - 2024-07-16

- Refactored filtering for a snappier, faster experience

## [New Features] - 2024-07-12

- Fix search functionality
Expand Down
47 changes: 20 additions & 27 deletions extensions/plex/src/sectionItems.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
import { ActionPanel, Action, Grid } from "@raycast/api";
import { useFetch, Response } from "@raycast/utils";
import React from "react";
import { useState, useEffect } from "react";
import { ENDPOINTS, plex_token } from "../utils/constants";
import { Action, ActionPanel, Grid } from "@raycast/api";
import { useFetch } from "@raycast/utils";
import { useMemo, useState } from "react";
import { SectionItemsApiResponse } from "../types/types";
import { ENDPOINTS, plex_token } from "../utils/constants";
import thumbLinks from "../utils/thumbLinks";
import { MediaItem } from "./mediaItem";

export function GetSectionItems({ sectionId, sectionName }: { sectionId: string; sectionName: string }) {
const [searchText, setSearchText] = useState<string>("");
const [filteredList, setFilteredList] = useState<SectionItemsApiResponse["MediaContainer"]["Metadata"][]>([]);

const endpoint = `${ENDPOINTS.librarySections}${sectionId}/all`;

Expand All @@ -20,25 +18,10 @@ export function GetSectionItems({ sectionId, sectionName }: { sectionId: string;
keepPreviousData: true,
});

useEffect(() => {
if (!isLoading && Array.isArray(data)) {
setFilteredList(data);
}
}, [isLoading, data]);

useEffect(() => {
if (Array.isArray(data)) {
if (searchText.length > 0) {
setFilteredList(
filteredList.filter((item: SectionItemsApiResponse["MediaContainer"]["Metadata"]) =>
item.title.toLowerCase().includes(searchText.toLowerCase()),
),
);
} else if (searchText.length === 0) {
setFilteredList(data);
}
}
}, [searchText]);
const filteredItems = useMemo(() => {
const items = Array.isArray(data) ? data : [];
return filterItems(items, searchText);
}, [searchText, data]);

return (
<Grid
Expand All @@ -53,8 +36,8 @@ export function GetSectionItems({ sectionId, sectionName }: { sectionId: string;
navigationTitle={sectionName}
searchBarPlaceholder={"Search " + sectionName}
>
{Array.isArray(filteredList) &&
filteredList.map((item: SectionItemsApiResponse["MediaContainer"]["Metadata"]) => (
{Array.isArray(filteredItems) &&
filteredItems.map((item: SectionItemsApiResponse["MediaContainer"]["Metadata"]) => (
<Grid.Item
key={item.guid}
content={{
Expand All @@ -81,3 +64,13 @@ async function parseResponse(response: Response): Promise<SectionItemsApiRespons

return json.MediaContainer.Metadata;
}

function filterItems(items: SectionItemsApiResponse["MediaContainer"]["Metadata"][], filter: string) {
if (filter.length === 0) {
return items;
}

return items.filter((item: SectionItemsApiResponse["MediaContainer"]["Metadata"]) =>
item.title.toLowerCase().includes(filter.toLowerCase()),
);
}

0 comments on commit b3f3fc4

Please sign in to comment.