wrolpi/app/src/components
lrnselfreliance d75be8e1a4
Download forms: allow a frequency of "Once" (#804)
* app: a download frequency of "Once" no longer blocks submission

useForm treated any falsy value as a missing required field.  "Once" is
frequency 0, so the Channel/Playlist, RSS, and Zim download forms never
became ready and the Download button stayed disabled.  Only null,
undefined, '', false, and NaN count as missing now.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* downloads: editing to "Once" stores a once-download, not frequency 0

Once-downloads have a NULL frequency.  A 0 frequency counted as recurring
(frequency != None) but could never be scheduled (not frequency), so an
edited download stayed on the recurring list and could break renewal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:00:24 -06:00
..
admin Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
calculators Add a Solar calculator (#778) 2026-10-04 18:36:45 -06:00
collections Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
inventory app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
ui Resume videos and audio where the user left off; show progress on cards (#791) 2026-10-08 17:29:22 -06:00
AddToPlaylist.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Apps.js app: Flasher saved configs and Statistics distinguish pending from empty (#733) 2026-09-26 17:05:02 -06:00
Archive.js ui: the last of Semantic UI, in name and in dead CSS 2026-08-08 18:05:54 -06:00
ArchivePreview.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Bookmarks.js Bookmarks: a nav menu of user links, stored in bookmarks.yaml (#729) 2026-09-26 13:11:36 -06:00
Bookmarks.test.js Bookmarks: a nav menu of user links, stored in bookmarks.yaml (#729) 2026-09-26 13:11:36 -06:00
BulkTagModal.js ui: only the top modal answers Escape, and the audited widths 2026-08-08 18:05:49 -06:00
BulkTagModal.test.js ui: migrate Downloads, Upload, and BulkTagModal off Semantic 2026-08-08 18:04:02 -06:00
Calculators.js Add a Solar calculator (#778) 2026-10-04 18:36:45 -06:00
CbzViewer.js Resume EPUBs and comic books where the reader left off (#798) 2026-10-08 18:19:51 -06:00
CbzViewer.test.js Resume EPUBs and comic books where the reader left off (#798) 2026-10-08 18:19:51 -06:00
Channels.cy.js Remove CircleCI (#796) 2026-10-08 17:19:38 -06:00
Channels.js ui: a Back button is a row of one, not a stretched flex child 2026-08-08 18:05:52 -06:00
CodecSettings.test.js videos: codec download preferences with transcode and strict-fail options (#701) 2026-09-07 09:12:00 -06:00
Common.js Resume videos and audio where the user left off; show progress on cards (#791) 2026-10-08 17:29:22 -06:00
Common.test.js Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
DatesSelector.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
DesktopToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Docs.js Resume EPUBs and comic books where the reader left off (#798) 2026-10-08 18:19:51 -06:00
Docs.test.js Resume EPUBs and comic books where the reader left off (#798) 2026-10-08 18:19:51 -06:00
DomainEditPage.test.js ui: the last of Semantic UI, in name and in dead CSS 2026-08-08 18:05:54 -06:00
DomainsPage.test.js Reformatting code. 2025-12-06 15:11:37 -07:00
DomainTagging.test.js test: one place for fixtures, real providers instead of mocked context modules 2026-08-08 18:04:04 -06:00
DonatePage.js ui: only the top modal answers Escape, and the audited widths 2026-08-08 18:05:49 -06:00
Download.cy.js Download forms: allow a frequency of "Once" (#804) 2026-10-09 15:00:24 -06:00
Download.js app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
Download.test.js app: number fields no longer throw "e.preventDefault is not a function" (#735) 2026-09-26 17:41:52 -06:00
DownloaderSelector.test.js app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
ErrorBoundary.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -06:00
FileBrowser.js ui: two upload dialogs that had drifted apart (#664) 2026-08-13 15:15:04 -06:00
FileBrowser.test.js ui: the Files filter's clear button rejoins its input (#650) 2026-08-08 18:05:55 -06:00
FilePreview.js Resume EPUBs and comic books where the reader left off (#798) 2026-10-08 18:19:51 -06:00
FilePreview.test.js Preview markdown files formatted, with a raw toggle (#780) 2026-10-05 13:26:42 -06:00
FilePreviewTracking.test.js Fix file view tracking: docs mark viewed, previews count one view (#786) 2026-10-08 15:04:13 -06:00
Files.js ui: the last of Semantic UI, in name and in dead CSS 2026-08-08 18:05:54 -06:00
Flasher.js app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
Flasher.test.js app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
Headline.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -06:00
HelpModal.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
KeyboardShortcutsProvider.js ui: the last of Semantic UI, in name and in dead CSS 2026-08-08 18:05:54 -06:00
Map.js Add a Solar calculator (#778) 2026-10-04 18:36:45 -06:00
Map.test.js review: name the icon-only controls, and make two guards mean what they say 2026-08-08 18:05:50 -06:00
mapPoiPopup.js map: clicking a POI shows its kind, detail, elevation and coordinates (#738) 2026-09-27 08:23:03 -06:00
MapPoiPopup.test.js map: clicking a POI shows its kind, detail, elevation and coordinates (#738) 2026-09-27 08:23:03 -06:00
MapPreview.test.js Map previews that never drew, and a Docker map with no world under it (#658) 2026-08-11 20:37:23 -06:00
MapSearchView.js app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
MapSearchView.test.js app: api helpers report failure instead of returning an empty value (#736) 2026-09-26 17:47:32 -06:00
MapTables.test.js Add a Solar calculator (#778) 2026-10-04 18:36:45 -06:00
MapViewer.js Add a Solar calculator (#778) 2026-10-04 18:36:45 -06:00
MapViewer.test.js Add a Solar calculator (#778) 2026-10-04 18:36:45 -06:00
MarkdownPreview.js Preview markdown files formatted, with a raw toggle (#780) 2026-10-05 13:26:42 -06:00
MarkdownPreview.test.js Preview markdown files formatted, with a raw toggle (#780) 2026-10-05 13:26:42 -06:00
Nav.js Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
Nav.test.js Bookmarks: a nav menu of user links, stored in bookmarks.yaml (#729) 2026-09-26 13:11:36 -06:00
OtherSearchView.test.js Other search tab: search Channels by name, add Domains and Playlists, fix the estimate (#785) 2026-10-07 18:22:12 -06:00
otp.js Move One-Time Pad encryption to the browser (#479) 2026-06-13 13:52:34 -06:00
otp.test.js Move One-Time Pad encryption to the browser (#479) 2026-06-13 13:52:34 -06:00
Placeholder.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Playlists.js review: the scan the first two commits needed 2026-08-08 18:05:53 -06:00
Playlists.test.js Add ordered collections (playlists): polymorphic items + item API (#475) 2026-06-11 19:46:34 -06:00
Repos.js Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
Repos.test.js Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
Search.js Other search tab: search Channels by name, add Domains and Playlists, fix the estimate (#785) 2026-10-07 18:22:12 -06:00
SearchFilterModal.test.js ui: thirty-five files off Semantic, leaving fifteen 2026-08-08 18:04:01 -06:00
SearchSuggestions.test.js Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
Share.js files: left-align the preview toolbar (#698) 2026-09-03 16:03:17 -06:00
ShortcutHint.js Displaying cmd+k/ctrl+k global search keyboard shortcut suggestion. 2026-02-23 16:07:22 -07:00
SortableTable.js review: the 375px phone this fix had not been measured on (#662) 2026-08-13 11:38:49 -06:00
StatisticsPage.test.js app: Flasher saved configs and Statistics distinguish pending from empty (#733) 2026-09-26 17:05:02 -06:00
StatusLoaded.test.js app: status and settings contexts say whether their first poll landed (#734) 2026-09-26 17:25:46 -06:00
Tables.js ui: nine leaf files off Semantic, and the components they needed 2026-08-08 18:04:00 -06:00
TaggedDeleteConfirmModal.js ui: let a confirmation choose its width 2026-08-08 18:05:51 -06:00
TaggedDeleteConfirmModal.test.js ui: let a confirmation choose its width 2026-08-08 18:05:51 -06:00
Theme.tsx ui: the last of Semantic UI, in name and in dead CSS 2026-08-08 18:05:54 -06:00
ThemeProvider.test.js test: act on review — observe the wiring, and stop the soft assertions 2026-08-08 18:05:45 -06:00
ThemeSamplePage.js Resume videos and audio where the user left off; show progress on cards (#791) 2026-10-08 17:29:22 -06:00
Upload.js ui: two upload dialogs that had drifted apart (#664) 2026-08-13 15:15:04 -06:00
Upload.test.js ui: two upload dialogs that had drifted apart (#664) 2026-08-13 15:15:04 -06:00
Vars.js Add a Repos module that mirrors git repositories (#783) 2026-10-07 15:16:58 -06:00
VideoEditMenu.js videos: transcode can remove the audio stream (silent video) (#737) 2026-09-26 17:49:14 -06:00
VideoEditMenu.test.js videos: transcode can remove the audio stream (silent video) (#737) 2026-09-26 17:49:14 -06:00
VideoExtras.test.js app: video comments and description distinguish pending from empty (#727) 2026-09-26 11:22:37 -06:00
VideoPlayer.js Resume videos and audio where the user left off; show progress on cards (#791) 2026-10-08 17:29:22 -06:00
VideoPlayer.test.js videos: address review — tighten auto-caption detection 2026-07-16 18:29:18 -06:00
Videos.js videos: codec download preferences with transcode and strict-fail options (#701) 2026-09-07 09:12:00 -06:00
VncToggle.test.js ui: Common.js and thirteen more files off Semantic 2026-08-08 18:04:00 -06:00
Zim.js zim: recompute the outdated-Zims flag after startup and on Delete (#706) 2026-09-12 15:19:36 -06:00
Zim.test.js zim: recompute the outdated-Zims flag after startup and on Delete (#706) 2026-09-12 15:19:36 -06:00