Skip to content

Commit 630cba6

Browse files
committed
Add functionality to filter by system packages (Default is to not show them). Resolves #172 (#222)
1 parent 1bfd737 commit 630cba6

File tree

4 files changed

+53
-2
lines changed

4 files changed

+53
-2
lines changed

src/features/packages/Packages.jsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ import {
5454
selectProcessing,
5555
selectRepos,
5656
selectUpgradable,
57+
systemFilter,
5758
} from "./packagesSlice";
5859

5960
import { selectNiceName } from "../device/deviceSlice";
@@ -120,6 +121,11 @@ export default function Packages({ adb }) {
120121
dispatch(repo(value));
121122
}, [dispatch]);
122123

124+
const handleCategoryStateChange = useCallback((event) => {
125+
const value = event.target.value;
126+
dispatch(systemFilter(value === "all"));
127+
}, [dispatch]);
128+
123129
useEffect(() => {
124130
if(!fetched && fetchedUpgradable) {
125131
dispatch(fetchPackages(adb));
@@ -366,6 +372,27 @@ export default function Packages({ adb }) {
366372
</Select>
367373
</FormControl>
368374

375+
<FormControl sx={{ width: 120 }}>
376+
<InputLabel id="package-state-select-label">
377+
{t("labelCategory")}
378+
</InputLabel>
379+
380+
<Select
381+
id="package-state-select"
382+
label={t("labelCategory")}
383+
onChange={handleCategoryStateChange}
384+
value={filter.system ? "all" : "all-except-system"}
385+
>
386+
<MenuItem value="all-except-system">
387+
{t("labelCategoryAllExceptSystem")}
388+
</MenuItem>
389+
390+
<MenuItem value="all">
391+
{t("labelCategoryAll")}
392+
</MenuItem>
393+
</Select>
394+
</FormControl>
395+
369396
<FormControl sx={{ width: 250 }}>
370397
<TextField
371398
defaultValue={filter.search}

src/features/packages/packagesSlice.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ const initialState = {
1010
upgradable: [],
1111
filter: {
1212
installed: false,
13-
search: null,
1413
repo: "fpv-wtf",
14+
search: null,
15+
system: false,
1516
},
1617
fetched: false,
1718
fetchedUpgradable: false,
@@ -135,6 +136,13 @@ function filterPackages(packages, filter) {
135136
(filter.repo === item.repo && !filter.search)
136137
));
137138

139+
// Remove system packages
140+
if(!filter.system) {
141+
filtered = filtered.filter((item) => (
142+
!(item.details.section && item.details.section.includes("system"))
143+
));
144+
}
145+
138146
filtered = filtered.filter((item) => {
139147
if(filter.installed) {
140148
return item.installed;
@@ -184,6 +192,14 @@ export const packagesSlice = createSlice({
184192

185193
state.filtered = filterPackages(state.packages, state.filter);
186194
},
195+
systemFilter: (state, event) => {
196+
state.filter = {
197+
...state.filter,
198+
system: event.payload,
199+
};
200+
201+
state.filtered = filterPackages(state.packages, state.filter);
202+
},
187203
processing: (state, event) => {
188204
state.processing = event.payload;
189205
},
@@ -265,6 +281,7 @@ export const {
265281
repo,
266282
reset,
267283
search,
284+
systemFilter,
268285
} = packagesSlice.actions;
269286

270287
export const selectRepos = (state) => state.packages.repos;

src/translations/en/packages.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,8 @@
1515
"version": "Version",
1616
"description": "Description",
1717
"matchCount": "Found {{count}} packages",
18-
"visitProjectPage": "Visit project page"
18+
"visitProjectPage": "Visit project page",
19+
"labelCategory": "Category",
20+
"labelCategoryAllExceptSystem": "All (except system)",
21+
"labelCategoryAll": "All"
1922
}

src/utils/OpkgHelpers.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const parsePackageIndex = (content) => {
22
const lines = content.split("\n");
3+
const arrays = ["section"];
34

45
let currentPackage = null;
56
const packages = {};
@@ -16,6 +17,9 @@ const parsePackageIndex = (content) => {
1617
key = key.toLowerCase();
1718

1819
packages[currentPackage][key] = value;
20+
if(arrays.includes(key)) {
21+
packages[currentPackage][key] = value.split(",").map((item) => item.trim());
22+
}
1923
}
2024
}
2125

0 commit comments

Comments
 (0)