Compare commits

..

3 Commits

Author SHA1 Message Date
Robin Dadswell 0150988bcd Added Indexer Factory 2021-06-04 23:08:02 +01:00
Robin Dadswell 593231c3af Updated config definition to match Jacketts config definition 2021-06-04 23:07:40 +01:00
Robin Dadswell dbbb6bf0d1 Starts of Jackett Migrations
request extension

start migration controller/resource

removed unneccesary using - probalby more to go still

more scaffolding

added more framework; contemplating using the importlists from other arrs as a base for this

Revert "jackett config"

This reverts commit 6523eaf55450ceed84b3667421595a9d9e34dc51.

added stuff from nit's radarr pr

neated code up a little bit, more to do on this though

get config sorted, api logic also added - migration todo and indexer config to do
2021-06-03 11:07:56 +01:00
649 changed files with 12609 additions and 43348 deletions
+1 -1
View File
@@ -260,7 +260,7 @@ dotnet_diagnostic.CA5392.severity = suggestion
dotnet_diagnostic.CA5394.severity = suggestion dotnet_diagnostic.CA5394.severity = suggestion
dotnet_diagnostic.CA5397.severity = suggestion dotnet_diagnostic.CA5397.severity = suggestion
dotnet_diagnostic.SYSLIB0014.severity = none
[*.{js,html,js,hbs,less,css}] [*.{js,html,js,hbs,less,css}]
charset = utf-8 charset = utf-8
+1 -1
View File
@@ -1,6 +1,6 @@
# These are supported funding model platforms # These are supported funding model platforms
github: Prowlarr # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username patreon: # Replace with a single Patreon username
open_collective: prowlarr open_collective: prowlarr
ko_fi: # Replace with a single Ko-fi username ko_fi: # Replace with a single Ko-fi username
+36
View File
@@ -0,0 +1,36 @@
---
name: Bug Report
about: Support Requests will be closed immediately, if you are not 100% certain this is a bug please go to our Reddit or Discord first. Exceptions do not mean you found a bug!
title: ''
labels: 'Type: Bug'
assignees: ''
---
<!-- Support Requests will be closed immediately, if you are unsure go to our Reddit or Discord first. Exceptions do not mean you found a bug! -->
**Describe the bug**
<!-- A clear and concise description of what the bug is. -->
**To Reproduce**
<!-- Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error -->
**Expected behavior**
<!-- A clear and concise description of what you expected to happen.-->
**Screenshots**
<!-- If applicable, add screenshots to help explain your problem.-->
**Platform Information (please complete the following information):**
- OS: <!-- [e.g. Windows 10 2004 / Ubuntu 20.04] -->
- Docker: <!-- [Yes/No] -->
- .NET Version (System -> Status): <!--[e.g. .NET 5.0.1] -->
- Browser and Version (Only needed for UI issues): <!--[e.g. chrome 86.0.4240.198] -->
- Prowlarr Version: <!--[e.g. 0.1.2.1854-->
- Prowlarr Branch: <!--[e.g. develop, nightly]-->
Turn on Trace logs under Settings -> General and wait for the bug to occur again.
**Upload the full log file here (or another site (e.g. pastebin) and link it). Issues will be closed, if they do not include this!**
<!-- Trace logs are named Prowlarr.trace.txt or Prowlarr.trace.#.txt and will contain "trace" in them-->
-73
View File
@@ -1,73 +0,0 @@
name: Bug Report
description: 'Report a new bug, if you are not 100% certain this is a bug please go to our Reddit or Discord first'
labels: ['Type: Bug', 'Status: Needs Triage']
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the bug you encountered.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Current Behavior
description: A concise description of what you're experiencing.
validations:
required: true
- type: textarea
attributes:
label: Expected Behavior
description: A concise description of what you expected to happen.
validations:
required: true
- type: textarea
attributes:
label: Steps To Reproduce
description: Steps to reproduce the behavior.
placeholder: |
1. In this environment...
2. With this config...
3. Run '...'
4. See error...
validations:
required: false
- type: textarea
attributes:
label: Environment
description: |
examples:
- **OS**: Ubuntu 20.04
- **Prowlarr**: Prowlarr 0.1.0.650
- **Docker Install**: Yes
- **Using Reverse Proxy**: No
- **Browser**: Firefox 90 (If UI related)
value: |
- OS:
- Prowlarr:
- Docker Install:
- Using Reverse Proxy:
- Browser:
render: markdown
validations:
required: true
- type: dropdown
attributes:
label: What branch are you running?
options:
- Master
- Develop
- Nightly
- Other (This issue will be closed)
validations:
required: true
- type: textarea
attributes:
label: Trace Logs?
description: |
Trace Logs (https://wiki.servarr.com/prowlarr/troubleshooting#logging-and-log-files)
***Generally speaking, all bug reports must have trace logs provided.***
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
Additionally, any additional info? Screenshots? References? Anything that will give us more context about the issue you are encountering!
validations:
required: true
-3
View File
@@ -1,8 +1,5 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Indexer Requests
url: https://requests.prowlarr.com/
about: Request new indexers to be added. Vote on existing requests.
- name: Support via Discord - name: Support via Discord
url: https://prowlarr.com/discord url: https://prowlarr.com/discord
about: Chat with users and devs on support and setup related topics. about: Chat with users and devs on support and setup related topics.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature Request
about: Suggest an idea for Prowlarr
title: ''
labels: 'Type: Feature Request'
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the solution you'd like**
<!-- A clear and concise description of what you want to happen. -->
**Describe alternatives you've considered**
<!-- A clear and concise description of any alternative solutions or features you've considered. -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->
@@ -1,38 +0,0 @@
name: Feature Request
description: 'Suggest an idea for Prowlarr'
labels: ['Type: Feature Request', 'Status: Needs Triage']
body:
- type: checkboxes
attributes:
label: Is there an existing issue for this?
description: Please search to see if an issue already exists for the feature you are requesting.
options:
- label: I have searched the existing issues
required: true
- type: textarea
attributes:
label: Is your feature request related to a problem? Please describe
description: A clear and concise description of what the problem is.
validations:
required: true
- type: textarea
attributes:
label: Describe the solution you'd like
description: A clear and concise description of what you want to happen.
validations:
required: true
- type: textarea
attributes:
label: Describe alternatives you've considered
description: A clear and concise description of any alternative solutions or features you've considered.
validations:
required: true
- type: textarea
attributes:
label: Anything else?
description: |
Links? References? Mockups? Anything that will give us more context about the feature you are encountering!
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in.
validations:
required: true
+3 -4
View File
@@ -1,15 +1,14 @@
#### Database Migration #### Database Migration
YES - XXXX | NO YES | NO
#### Description #### Description
A few sentences describing the overall goals of the pull request's commits. A few sentences describing the overall goals of the pull request's commits.
#### Screenshot (if UI related) #### Screenshot (if UI related)
#### Todos #### Todos
- [ ] Tests - [ ] Tests
- [ ] Translation Keys (./src/NzbDrone.Core/Localization/Core/en.json) - [ ] Translation Keys
- [ ] [Wiki Updates](https://wiki.servarr.com) - [ ] Wiki Updates
#### Issues Fixed or Closed by this PR #### Issues Fixed or Closed by this PR
-41
View File
@@ -1,41 +0,0 @@
name: Sync issue to Azure DevOps work item
on:
issues:
types:
[opened, edited, deleted, closed, reopened, labeled, unlabeled, assigned]
concurrency: azuresync-${{ github.event.issue.number }}
jobs:
alert:
runs-on: ubuntu-latest
steps:
- uses: danhellem/github-actions-issue-to-work-item@master
if: "${{ contains(github.event.issue.labels.*.name, 'Type: Bug') == true }}"
env:
ado_token: "${{ secrets.ADO_PERSONAL_ACCESS_TOKEN }}"
github_token: "${{ github.token }}"
ado_organization: "Servarr"
ado_project: "Servarr"
ado_area_path: "Servarr\\Prowlarr"
ado_wit: "Bug"
ado_new_state: "New"
ado_active_state: "Active"
ado_close_state: "Closed"
ado_bypassrules: true
log_level: 100
- uses: danhellem/github-actions-issue-to-work-item@master
if: "${{ contains(github.event.issue.labels.*.name, 'Type: Bug') == false }}"
env:
ado_token: "${{ secrets.ADO_PERSONAL_ACCESS_TOKEN }}"
github_token: "${{ github.token }}"
ado_organization: "Servarr"
ado_project: "Servarr"
ado_area_path: "Servarr\\Prowlarr"
ado_wit: "User Story"
ado_new_state: "New"
ado_active_state: "Active"
ado_close_state: "Closed"
ado_bypassrules: true
log_level: 100
+26 -6
View File
@@ -1,13 +1,33 @@
# How to Contribute # How to Contribute #
We're always looking for people to help make Prowlarr even better, there are a number of ways to contribute. We're always looking for people to help make Prowlarr even better, there are a number of ways to contribute.
This file has been moved to the wiki for the latest details please see the [contributing wiki page](https://wiki.servarr.com/prowlarr/contributing). ## Documentation ##
Setup guides, FAQ, the more information we have on the wiki the better.
## Documentation ## Development ##
Setup guides, [FAQ](https://wiki.servarr.com/prowlarr/faq), the more information we have on the [wiki](https://wiki.servarr.com/prowlarr) the better. See the readme for information on setting up your development environment.
## Development ### Contributing Code ###
- If you're adding a new, already requested feature, please comment on [Github Issues](https://github.com/Prowlarr/Prowlarr/issues "Github Issues") so work is not duplicated (If you want to add something not already on there, please talk to us first)
- Rebase from Prowlarr's develop branch, don't merge
- Make meaningful commits, or squash them
- Feel free to make a pull request before work is complete, this will let us see where its at and make comments/suggest improvements
- Reach out to us on the discord if you have any questions
- Add tests (unit/integration)
- Commit with *nix line endings for consistency (We checkout Windows and commit *nix)
- One feature/bug fix per pull request to keep things clean and easy to understand
- Use 4 spaces instead of tabs, this is the default for VS 2019 and WebStorm (to my knowledge)
See the [Wiki Page](https://wiki.servarr.com/prowlarr/contributing) ### Pull Requesting ###
- Only make pull requests to develop, never master, if you make a PR to master we'll comment on it and close it
- You're probably going to get some comments or questions from us, they will be to ensure consistency and maintainability
- We'll try to respond to pull requests as soon as possible, if its been a day or two, please reach out to us, we may have missed it
- Each PR should come from its own [feature branch](http://martinfowler.com/bliki/FeatureBranch.html) not develop in your fork, it should have a meaningful branch name (what is being added/fixed)
- new-feature (Good)
- fix-bug (Good)
- patch (Bad)
- develop (Bad)
If you have any questions about any of this, please let us know.
+12 -22
View File
@@ -2,23 +2,20 @@
[![Build Status](https://dev.azure.com/Prowlarr/Prowlarr/_apis/build/status/Prowlarr.Prowlarr?branchName=develop)](https://dev.azure.com/Prowlarr/Prowlarr/_build/latest?definitionId=1&branchName=develop) [![Build Status](https://dev.azure.com/Prowlarr/Prowlarr/_apis/build/status/Prowlarr.Prowlarr?branchName=develop)](https://dev.azure.com/Prowlarr/Prowlarr/_build/latest?definitionId=1&branchName=develop)
[![Translated](https://translate.servarr.com/widgets/servarr/-/prowlarr/svg-badge.svg)](https://translate.servarr.com/engage/prowlarr/?utm_source=widget) [![Translated](https://translate.servarr.com/widgets/servarr/-/prowlarr/svg-badge.svg)](https://translate.servarr.com/engage/prowlarr/?utm_source=widget)
[![Docker Pulls](https://img.shields.io/docker/pulls/hotio/prowlarr.svg)](https://wiki.servarr.com/prowlarr/installation#docker) [![Docker Pulls](https://img.shields.io/docker/pulls/hotio/prowlarr.svg)](https://wiki.servarr.com/Prowlarr_Installation#Docker)
![Github Downloads](https://img.shields.io/github/downloads/Prowlarr/Prowlarr/total.svg) ![Github Downloads](https://img.shields.io/github/downloads/Prowlarr/Prowlarr/total.svg)
[![Backers on Open Collective](https://opencollective.com/Prowlarr/backers/badge.svg)](#backers) [![Backers on Open Collective](https://opencollective.com/Prowlarr/backers/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/Prowlarr/sponsors/badge.svg)](#sponsors) [![Sponsors on Open Collective](https://opencollective.com/Prowlarr/sponsors/badge.svg)](#sponsors)
Prowlarr is an indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports management of both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Lidarr, Mylar3, Radarr, Readarr, and Sonarr offering complete management of your indexers with no per app Indexer setup required (we do it all). Prowlarr is a indexer manager/proxy built on the popular arr .net/reactjs base stack to integrate with your various PVR apps. Prowlarr supports both Torrent Trackers and Usenet Indexers. It integrates seamlessly with Sonarr, Radarr, Lidarr, and Readarr offering complete management of your indexers with no per app Indexer setup required (we do it all).
## Major Features Include: ## Major Features Include:
- Usenet support for 24 indexers natively, including Headphones VIP, and support for any Newznab compatible indexer via "Generic Newznab" - Usenet support for any Newznab compatible indexer, including Headphones VIP
- Torrent support for over 500 trackers with more added all the time - Torrent support 400+ trackers & more coming soon
- Torrent support for any Torznab compatible tracker via "Generic Torznab" - Indexer Sync to Sonarr/Radarr/Readarr/Lidarr, so no manual configuration of the other applications are required
- Indexer Sync to Sonarr/Radarr/Readarr/Lidarr/Mylar3, so no manual configuration of the other applications are required - Indexer History and Statistics
- Indexer history and statistics - Manual Searching of Trackers & Indexers at a category level
- Manual searching of Trackers & Indexers at a category level
- Support for pushing releases directly to your download clients from Prowlarr - Support for pushing releases directly to your download clients from Prowlarr
- Indexer health and status notifications
- Per Indexer proxy support (SOCKS4, SOCKS5, HTTP, Flaresolverr)
## Support ## Support
Note: Prowlarr is currently early in life, thus bugs should be expected Note: Prowlarr is currently early in life, thus bugs should be expected
@@ -26,24 +23,17 @@ Note: Prowlarr is currently early in life, thus bugs should be expected
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://prowlarr.com/discord) [![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60)](https://prowlarr.com/discord)
[![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60)](https://www.reddit.com/r/Prowlarr) [![Reddit](https://img.shields.io/badge/reddit-discussion-FF4500.svg?maxAge=60)](https://www.reddit.com/r/Prowlarr)
[![GitHub - Bugs and Feature Requests Only](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Prowlarr/Prowlarr/issues) [![GitHub - Bugs and Feature Requests Only](https://img.shields.io/badge/github-issues-red.svg?maxAge=60)](https://github.com/Prowlarr/Prowlarr/issues)
[![Wiki](https://img.shields.io/badge/servarr-wiki-181717.svg?maxAge=60)](https://wiki.servarr.com/prowlarr) [![Wiki](https://img.shields.io/badge/servarr-wiki-181717.svg?maxAge=60)](https://wiki.servarr.com/Prowlarr)
## Indexers/Trackers ## Feature Requests
[Supported Indexers](https://wiki.servarr.com/en/prowlarr/supported-indexers) [Feature Requests](https://github.com/Prowlarr/Prowlarr/issues/new?assignees=&template=feature_request.md&Type%3A%20Feature%20Request&title=)
[Indexer Requests](https://requests.prowlarr.com)
- Request or vote on an existing request for a new tracker/indexer
## Contributors & Developers ## Contributors & Developers
This project exists thanks to all the people who contribute. [Contribute](CONTRIBUTING.md).
- [Contribute (GitHub)](CONTRIBUTING.md)
- [Contribution (Wiki Article)](https://wiki.servarr.com/prowlarr/contributing)
- [YML Indexer Defintion (Wiki Article)](https://wiki.servarr.com/prowlarr/cardigann-yml-definition)
This project exists thanks to all the people who contribute.
<a href="https://github.com/Prowlarr/Prowlarr/graphs/contributors"><img src="https://opencollective.com/Prowlarr/contributors.svg?width=890&button=false" /></a> <a href="https://github.com/Prowlarr/Prowlarr/graphs/contributors"><img src="https://opencollective.com/Prowlarr/contributors.svg?width=890&button=false" /></a>
## Backers ## Backers
Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/Prowlarr#backer) Thank you to all our backers! 🙏 [Become a backer](https://opencollective.com/Prowlarr#backer)
+31 -54
View File
@@ -7,13 +7,13 @@ variables:
outputFolder: './_output' outputFolder: './_output'
artifactsFolder: './_artifacts' artifactsFolder: './_artifacts'
testsFolder: './_tests' testsFolder: './_tests'
majorVersion: '0.1.4' majorVersion: '0.1.0'
minorVersion: $[counter('minorVersion', 1)] minorVersion: $[counter('minorVersion', 1)]
prowlarrVersion: '$(majorVersion).$(minorVersion)' prowlarrVersion: '$(majorVersion).$(minorVersion)'
buildName: '$(Build.SourceBranchName).$(prowlarrVersion)' buildName: '$(Build.SourceBranchName).$(prowlarrVersion)'
sentryOrg: 'servarr' sentryOrg: 'servarr'
sentryUrl: 'https://sentry.servarr.com' sentryUrl: 'https://sentry.servarr.com'
dotnetVersion: '6.0.100' dotnetVersion: '5.0.203'
yarnCacheFolder: $(Pipeline.Workspace)/.yarn yarnCacheFolder: $(Pipeline.Workspace)/.yarn
trigger: trigger:
@@ -67,7 +67,7 @@ stages:
enableAnalysis: 'true' enableAnalysis: 'true'
Mac: Mac:
osName: 'Mac' osName: 'Mac'
imageName: 'macos-10.15' imageName: 'macos-10.14'
enableAnalysis: 'false' enableAnalysis: 'false'
Windows: Windows:
osName: 'Windows' osName: 'Windows'
@@ -111,23 +111,23 @@ stages:
artifact: '$(osName)Backend' artifact: '$(osName)Backend'
displayName: Publish Backend displayName: Publish Backend
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/win-x64/publish' - publish: '$(testsFolder)/net5.0/win-x64/publish'
artifact: WindowsCoreTests artifact: WindowsCoreTests
displayName: Publish Windows Test Package displayName: Publish Windows Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/linux-x64/publish' - publish: '$(testsFolder)/net5.0/linux-x64/publish'
artifact: LinuxCoreTests artifact: LinuxCoreTests
displayName: Publish Linux Test Package displayName: Publish Linux Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/linux-musl-x64/publish' - publish: '$(testsFolder)/net5.0/linux-musl-x64/publish'
artifact: LinuxMuslCoreTests artifact: LinuxMuslCoreTests
displayName: Publish Linux Musl Test Package displayName: Publish Linux Musl Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/freebsd-x64/publish' - publish: '$(testsFolder)/net5.0/freebsd-x64/publish'
artifact: FreebsdCoreTests artifact: FreebsdCoreTests
displayName: Publish FreeBSD Test Package displayName: Publish FreeBSD Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
- publish: '$(testsFolder)/net6.0/osx-x64/publish' - publish: '$(testsFolder)/net5.0/osx-x64/publish'
artifact: MacCoreTests artifact: MacCoreTests
displayName: Publish MacOS Test Package displayName: Publish MacOS Test Package
condition: and(succeeded(), eq(variables['osName'], 'Windows')) condition: and(succeeded(), eq(variables['osName'], 'Windows'))
@@ -144,7 +144,7 @@ stages:
imageName: 'ubuntu-18.04' imageName: 'ubuntu-18.04'
Mac: Mac:
osName: 'Mac' osName: 'Mac'
imageName: 'macos-10.15' imageName: 'macos-10.14'
Windows: Windows:
osName: 'Windows' osName: 'Windows'
imageName: 'windows-2019' imageName: 'windows-2019'
@@ -203,12 +203,12 @@ stages:
- bash: ./build.sh --packages - bash: ./build.sh --packages
displayName: Create Packages displayName: Create Packages
- bash: | - bash: |
distribution/windows/setup/inno/ISCC.exe distribution/windows/setup/prowlarr.iss //DFramework=net6.0 //DRuntime=win-x86 distribution/windows/setup/inno/ISCC.exe distribution/windows/setup/prowlarr.iss //DFramework=net5.0 //DRuntime=win-x86
cp distribution/windows/setup/output/Prowlarr.*windows.net6.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Prowlarr.${BUILDNAME}.windows-core-x86-installer.exe cp distribution/windows/setup/output/Prowlarr.*windows.net5.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Prowlarr.${BUILDNAME}.windows-core-x86-installer.exe
displayName: Create x86 .NET Core Windows installer displayName: Create x86 .NET Core Windows installer
- bash: | - bash: |
distribution/windows/setup/inno/ISCC.exe distribution/windows/setup/prowlarr.iss //DFramework=net6.0 //DRuntime=win-x64 distribution/windows/setup/inno/ISCC.exe distribution/windows/setup/prowlarr.iss //DFramework=net5.0 //DRuntime=win-x64
cp distribution/windows/setup/output/Prowlarr.*windows.net6.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Prowlarr.${BUILDNAME}.windows-core-x64-installer.exe cp distribution/windows/setup/output/Prowlarr.*windows.net5.0.exe ${BUILD_ARTIFACTSTAGINGDIRECTORY}/Prowlarr.${BUILDNAME}.windows-core-x64-installer.exe
displayName: Create x64 .NET Core Windows installer displayName: Create x64 .NET Core Windows installer
- publish: $(Build.ArtifactStagingDirectory) - publish: $(Build.ArtifactStagingDirectory)
artifact: 'WindowsInstaller' artifact: 'WindowsInstaller'
@@ -250,44 +250,29 @@ stages:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/win-x64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Windows x86 Core zip displayName: Create Windows x86 Core zip
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x86.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).windows-core-x86.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/win-x86/net6.0 rootFolderOrFile: $(artifactsFolder)/win-x86/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create MacOS x64 Core app displayName: Create MacOS Core app
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-x64.zip' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-x64.zip'
archiveType: 'zip' archiveType: 'zip'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-x64-app/net6.0 rootFolderOrFile: $(artifactsFolder)/macos-app/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create MacOS x64 Core tar displayName: Create MacOS Core tar
inputs: inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-core-x64.tar.gz' archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-core-x64.tar.gz'
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/macos/net5.0
- task: ArchiveFiles@2
displayName: Create MacOS arm64 Core app
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-app-core-arm64.zip'
archiveType: 'zip'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-arm64-app/net6.0
- task: ArchiveFiles@2
displayName: Create MacOS arm64 Core tar
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).osx-core-arm64.tar.gz'
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/osx-arm64/net6.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Core tar displayName: Create Linux Core tar
inputs: inputs:
@@ -295,7 +280,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-x64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create Linux Musl Core tar displayName: Create Linux Musl Core tar
inputs: inputs:
@@ -303,7 +288,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-musl-x64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM32 Linux Core tar displayName: Create ARM32 Linux Core tar
inputs: inputs:
@@ -311,15 +296,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-arm/net5.0
- task: ArchiveFiles@2
displayName: Create ARM32 Linux Musl Core tar
inputs:
archiveFile: '$(Build.ArtifactStagingDirectory)/Prowlarr.$(buildName).linux-musl-core-arm.tar.gz'
archiveType: 'tar'
tarCompression: 'gz'
includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm/net6.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM64 Linux Core tar displayName: Create ARM64 Linux Core tar
inputs: inputs:
@@ -327,7 +304,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-arm64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-arm64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create ARM64 Linux Musl Core tar displayName: Create ARM64 Linux Musl Core tar
inputs: inputs:
@@ -335,7 +312,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net6.0 rootFolderOrFile: $(artifactsFolder)/linux-musl-arm64/net5.0
- task: ArchiveFiles@2 - task: ArchiveFiles@2
displayName: Create FreeBSD Core Core tar displayName: Create FreeBSD Core Core tar
inputs: inputs:
@@ -343,7 +320,7 @@ stages:
archiveType: 'tar' archiveType: 'tar'
tarCompression: 'gz' tarCompression: 'gz'
includeRootFolder: false includeRootFolder: false
rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net6.0 rootFolderOrFile: $(artifactsFolder)/freebsd-x64/net5.0
- publish: $(Build.ArtifactStagingDirectory) - publish: $(Build.ArtifactStagingDirectory)
artifact: 'Packages' artifact: 'Packages'
displayName: Publish Packages displayName: Publish Packages
@@ -406,7 +383,7 @@ stages:
osName: 'Mac' osName: 'Mac'
testName: 'MacCore' testName: 'MacCore'
poolName: 'Azure Pipelines' poolName: 'Azure Pipelines'
imageName: 'macos-10.15' imageName: 'macos-10.14'
WindowsCore: WindowsCore:
osName: 'Windows' osName: 'Windows'
testName: 'WindowsCore' testName: 'WindowsCore'
@@ -533,7 +510,7 @@ stages:
MacCore: MacCore:
osName: 'Mac' osName: 'Mac'
testName: 'MacCore' testName: 'MacCore'
imageName: 'macos-10.15' imageName: 'macos-10.14'
pattern: 'Prowlarr.*.osx-core-x64.tar.gz' pattern: 'Prowlarr.*.osx-core-x64.tar.gz'
WindowsCore: WindowsCore:
osName: 'Windows' osName: 'Windows'
@@ -709,7 +686,7 @@ stages:
failBuild: false failBuild: false
Mac: Mac:
osName: 'Mac' osName: 'Mac'
imageName: 'macos-10.15' imageName: 'macos-10.14'
pattern: 'Prowlarr.*.osx-core-x64.tar.gz' pattern: 'Prowlarr.*.osx-core-x64.tar.gz'
failBuild: false failBuild: false
Windows: Windows:
@@ -861,8 +838,8 @@ stages:
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)/CoverageResults/**/coverage.opencover.xml
sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml sonar.cs.nunit.reportsPaths=$(Build.SourcesDirectory)/TestResult.xml
- bash: | - bash: |
./build.sh --backend -f net6.0 -r win-x64 ./build.sh --backend -f net5.0 -r win-x64
TEST_DIR=_tests/net6.0/win-x64/publish/ ./test.sh Windows Unit Coverage TEST_DIR=_tests/net5.0/win-x64/publish/ ./test.sh Windows Unit Coverage
displayName: Coverage Unit Tests displayName: Coverage Unit Tests
- task: SonarCloudAnalyze@1 - task: SonarCloudAnalyze@1
condition: eq(variables['System.PullRequest.IsFork'], 'False') condition: eq(variables['System.PullRequest.IsFork'], 'False')
@@ -902,7 +879,7 @@ stages:
artifactName: 'WindowsAutomationScreenshots' artifactName: 'WindowsAutomationScreenshots'
targetPath: $(Build.SourcesDirectory) targetPath: $(Build.SourcesDirectory)
- checkout: none - checkout: none
- pwsh: | - powershell: |
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/Servarr/AzureDiscordNotify/master/DiscordNotify.ps1')) iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/Servarr/AzureDiscordNotify/master/DiscordNotify.ps1'))
env: env:
SYSTEM_ACCESSTOKEN: $(System.AccessToken) SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+25 -29
View File
@@ -130,7 +130,7 @@ PackageLinux()
echo "Adding Prowlarr.Mono to UpdatePackage" echo "Adding Prowlarr.Mono to UpdatePackage"
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update
if [ "$framework" = "net6.0" ]; then if [ "$framework" = "net5.0" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
fi fi
@@ -141,13 +141,12 @@ PackageLinux()
PackageMacOS() PackageMacOS()
{ {
local framework="$1" local framework="$1"
local runtime="$2"
ProgressStart "Creating MacOS Package for $framework $runtime" ProgressStart "Creating MacOS Package for $framework"
local folder=$artifactsFolder/$runtime/$framework/Prowlarr local folder=$artifactsFolder/macos/$framework/Prowlarr
PackageFiles "$folder" "$framework" "$runtime" PackageFiles "$folder" "$framework" "osx-x64"
echo "Removing Service helpers" echo "Removing Service helpers"
rm -f $folder/ServiceUninstall.* rm -f $folder/ServiceUninstall.*
@@ -158,7 +157,7 @@ PackageMacOS()
echo "Adding Prowlarr.Mono to UpdatePackage" echo "Adding Prowlarr.Mono to UpdatePackage"
cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update cp $folder/Prowlarr.Mono.* $folder/Prowlarr.Update
if [ "$framework" = "net6.0" ]; then if [ "$framework" = "net5.0" ]; then
cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update cp $folder/Mono.Posix.NETStandard.* $folder/Prowlarr.Update
cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update cp $folder/libMonoPosixHelper.* $folder/Prowlarr.Update
fi fi
@@ -169,11 +168,10 @@ PackageMacOS()
PackageMacOSApp() PackageMacOSApp()
{ {
local framework="$1" local framework="$1"
local runtime="$2"
ProgressStart "Creating macOS App Package for $framework $runtime" ProgressStart "Creating macOS App Package for $framework"
local folder="$artifactsFolder/$runtime-app/$framework" local folder=$artifactsFolder/macos-app/$framework
rm -rf $folder rm -rf $folder
mkdir -p $folder mkdir -p $folder
@@ -181,7 +179,7 @@ PackageMacOSApp()
mkdir -p $folder/Prowlarr.app/Contents/MacOS mkdir -p $folder/Prowlarr.app/Contents/MacOS
echo "Copying Binaries" echo "Copying Binaries"
cp -r $artifactsFolder/$runtime/$framework/Prowlarr/* $folder/Prowlarr.app/Contents/MacOS cp -r $artifactsFolder/macos/$framework/Prowlarr/* $folder/Prowlarr.app/Contents/MacOS
echo "Removing Update Folder" echo "Removing Update Folder"
rm -r $folder/Prowlarr.app/Contents/MacOS/Prowlarr.Update rm -r $folder/Prowlarr.app/Contents/MacOS/Prowlarr.Update
@@ -228,8 +226,8 @@ Package()
PackageWindows "$framework" "$runtime" PackageWindows "$framework" "$runtime"
;; ;;
osx) osx)
PackageMacOS "$framework" "$runtime" PackageMacOS "$framework"
PackageMacOSApp "$framework" "$runtime" PackageMacOSApp "$framework"
;; ;;
esac esac
} }
@@ -329,14 +327,14 @@ then
Build Build
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then then
PackageTests "net6.0" "win-x64" PackageTests "net5.0" "win-x64"
PackageTests "net6.0" "win-x86" PackageTests "net5.0" "win-x86"
PackageTests "net6.0" "linux-x64" PackageTests "net5.0" "linux-x64"
PackageTests "net6.0" "linux-musl-x64" PackageTests "net5.0" "linux-musl-x64"
PackageTests "net6.0" "osx-x64" PackageTests "net5.0" "osx-x64"
if [ "$ENABLE_BSD" = "YES" ]; if [ "$ENABLE_BSD" = "YES" ];
then then
PackageTests "net6.0" "freebsd-x64" PackageTests "net5.0" "freebsd-x64"
fi fi
else else
PackageTests "$FRAMEWORK" "$RID" PackageTests "$FRAMEWORK" "$RID"
@@ -365,19 +363,17 @@ then
if [[ -z "$RID" || -z "$FRAMEWORK" ]]; if [[ -z "$RID" || -z "$FRAMEWORK" ]];
then then
Package "net6.0" "win-x64" Package "net5.0" "win-x64"
Package "net6.0" "win-x86" Package "net5.0" "win-x86"
Package "net6.0" "linux-x64" Package "net5.0" "linux-x64"
Package "net6.0" "linux-musl-x64" Package "net5.0" "linux-musl-x64"
Package "net6.0" "linux-arm64" Package "net5.0" "linux-arm64"
Package "net6.0" "linux-musl-arm64" Package "net5.0" "linux-musl-arm64"
Package "net6.0" "linux-arm" Package "net5.0" "linux-arm"
Package "net6.0" "linux-musl-arm" Package "net5.0" "osx-x64"
Package "net6.0" "osx-x64"
Package "net6.0" "osx-arm64"
if [ "$ENABLE_BSD" = "YES" ]; if [ "$ENABLE_BSD" = "YES" ];
then then
Package "net6.0" "freebsd-x64" Package "net5.0" "freebsd-x64"
fi fi
else else
Package "$FRAMEWORK" "$RID" Package "$FRAMEWORK" "$RID"
-6
View File
@@ -11,7 +11,6 @@ import ApplicationSettingsConnector from 'Settings/Applications/ApplicationSetti
import DevelopmentSettingsConnector from 'Settings/Development/DevelopmentSettingsConnector'; import DevelopmentSettingsConnector from 'Settings/Development/DevelopmentSettingsConnector';
import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector'; import DownloadClientSettingsConnector from 'Settings/DownloadClients/DownloadClientSettingsConnector';
import GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector'; import GeneralSettingsConnector from 'Settings/General/GeneralSettingsConnector';
import IndexerSettings from 'Settings/Indexers/IndexerSettings';
import NotificationSettings from 'Settings/Notifications/NotificationSettings'; import NotificationSettings from 'Settings/Notifications/NotificationSettings';
import Settings from 'Settings/Settings'; import Settings from 'Settings/Settings';
import TagSettings from 'Settings/Tags/TagSettings'; import TagSettings from 'Settings/Tags/TagSettings';
@@ -91,11 +90,6 @@ function AppRoutes(props) {
component={Settings} component={Settings}
/> />
<Route
path="/settings/indexers"
component={IndexerSettings}
/>
<Route <Route
path="/settings/applications" path="/settings/applications"
component={ApplicationSettingsConnector} component={ApplicationSettingsConnector}
+2
View File
@@ -4,5 +4,7 @@ export const CLEAR_HISTORY = 'ClearHistory';
export const CLEAR_LOGS = 'ClearLog'; export const CLEAR_LOGS = 'ClearLog';
export const DELETE_LOG_FILES = 'DeleteLogFiles'; export const DELETE_LOG_FILES = 'DeleteLogFiles';
export const DELETE_UPDATE_LOG_FILES = 'DeleteUpdateLogFiles'; export const DELETE_UPDATE_LOG_FILES = 'DeleteUpdateLogFiles';
export const INTERACTIVE_IMPORT = 'ManualImport';
export const RESET_API_KEY = 'ResetApiKey'; export const RESET_API_KEY = 'ResetApiKey';
export const RSS_SYNC = 'RssSync';
export const APP_INDEXER_SYNC = 'ApplicationIndexerSync'; export const APP_INDEXER_SYNC = 'ApplicationIndexerSync';
+2 -14
View File
@@ -23,16 +23,6 @@ class BarChart extends Component {
this.myChart = new Chart(this.canvasRef.current, { this.myChart = new Chart(this.canvasRef.current, {
type: 'bar', type: 'bar',
options: { options: {
x: {
ticks: {
stepSize: this.props.stepSize
}
},
y: {
ticks: {
stepSize: this.props.stepSize
}
},
indexAxis: this.props.horizontal ? 'y' : 'x', indexAxis: this.props.horizontal ? 'y' : 'x',
maintainAspectRatio: false, maintainAspectRatio: false,
plugins: { plugins: {
@@ -74,8 +64,7 @@ BarChart.propTypes = {
horizontal: PropTypes.bool, horizontal: PropTypes.bool,
legend: PropTypes.bool, legend: PropTypes.bool,
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired,
kind: PropTypes.oneOf(kinds.all).isRequired, kind: PropTypes.oneOf(kinds.all).isRequired
stepSize: PropTypes.number
}; };
BarChart.defaultProps = { BarChart.defaultProps = {
@@ -83,8 +72,7 @@ BarChart.defaultProps = {
horizontal: false, horizontal: false,
legend: false, legend: false,
title: '', title: '',
kind: kinds.INFO, kind: kinds.INFO
stepSize: 1
}; };
export default BarChart; export default BarChart;
@@ -16,16 +16,10 @@ class StackedBarChart extends Component {
maintainAspectRatio: false, maintainAspectRatio: false,
scales: { scales: {
x: { x: {
stacked: true, stacked: true
ticks: {
stepSize: this.props.stepSize
}
}, },
y: { y: {
stacked: true, stacked: true
ticks: {
stepSize: this.props.stepSize
}
} }
}, },
plugins: { plugins: {
@@ -69,13 +63,11 @@ class StackedBarChart extends Component {
StackedBarChart.propTypes = { StackedBarChart.propTypes = {
data: PropTypes.object.isRequired, data: PropTypes.object.isRequired,
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired
stepSize: PropTypes.number
}; };
StackedBarChart.defaultProps = { StackedBarChart.defaultProps = {
title: '', title: ''
stepSize: 1
}; };
export default StackedBarChart; export default StackedBarChart;
@@ -70,18 +70,18 @@ class FileBrowserModalContent extends Component {
} else { } else {
this._scrollerNode = null; this._scrollerNode = null;
} }
}; }
// //
// Listeners // Listeners
onPathInputChange = ({ value }) => { onPathInputChange = ({ value }) => {
this.setState({ currentPath: value }); this.setState({ currentPath: value });
}; }
onRowPress = (path) => { onRowPress = (path) => {
this.props.onFetchPaths(path); this.props.onFetchPaths(path);
}; }
onOkPress = () => { onOkPress = () => {
this.props.onChange({ this.props.onChange({
@@ -91,7 +91,7 @@ class FileBrowserModalContent extends Component {
this.props.onClearPaths(); this.props.onClearPaths();
this.props.onModalClose(); this.props.onModalClose();
}; }
// //
// Render // Render
@@ -129,7 +129,7 @@ class FileBrowserModalContent extends Component {
className={styles.mappedDrivesWarning} className={styles.mappedDrivesWarning}
kind={kinds.WARNING} kind={kinds.WARNING}
> >
<Link to="https://wiki.servarr.com/prowlarr/faq#why-cant-prowlarr-see-my-files-on-a-remote-server"> <Link to="https://wiki.servarr.com/Prowlarr_FAQ#Why_cant_Prowlarr_see_my_files_on_a_remote_server">
{translate('MappedDrivesRunningAsService')} {translate('MappedDrivesRunningAsService')}
</Link> </Link>
</Alert> </Alert>
@@ -78,16 +78,16 @@ class FileBrowserModalContentConnector extends Component {
allowFoldersWithoutTrailingSlashes: true, allowFoldersWithoutTrailingSlashes: true,
includeFiles includeFiles
}); });
}; }
onClearPaths = () => { onClearPaths = () => {
// this.props.dispatchClearPaths(); // this.props.dispatchClearPaths();
}; }
onModalClose = () => { onModalClose = () => {
this.props.dispatchClearPaths(); this.props.dispatchClearPaths();
this.props.onModalClose(); this.props.onModalClose();
}; }
// //
// Render // Render
@@ -28,7 +28,7 @@ class FileBrowserRow extends Component {
onPress = () => { onPress = () => {
this.props.onPress(this.props.path); this.props.onPress(this.props.path);
}; }
// //
// Render // Render
@@ -102,7 +102,7 @@ class DateFilterBuilderRowValue extends Component {
name: NAME, name: NAME,
value: newValue value: newValue
}); });
}; }
onTimeChange = ({ value }) => { onTimeChange = ({ value }) => {
const { const {
@@ -117,7 +117,7 @@ class DateFilterBuilderRowValue extends Component {
value: filterValue.value value: filterValue.value
} }
}); });
}; }
// //
// Render // Render
@@ -63,7 +63,7 @@ class FilterBuilderModalContent extends Component {
onLabelChange = ({ value }) => { onLabelChange = ({ value }) => {
this.setState({ label: value }); this.setState({ label: value });
}; }
onFilterChange = (index, filter) => { onFilterChange = (index, filter) => {
const filters = [...this.state.filters]; const filters = [...this.state.filters];
@@ -72,7 +72,7 @@ class FilterBuilderModalContent extends Component {
this.setState({ this.setState({
filters filters
}); });
}; }
onAddFilterPress = () => { onAddFilterPress = () => {
const filters = [...this.state.filters]; const filters = [...this.state.filters];
@@ -81,7 +81,7 @@ class FilterBuilderModalContent extends Component {
this.setState({ this.setState({
filters filters
}); });
}; }
onRemoveFilterPress = (index) => { onRemoveFilterPress = (index) => {
const filters = [...this.state.filters]; const filters = [...this.state.filters];
@@ -90,7 +90,7 @@ class FilterBuilderModalContent extends Component {
this.setState({ this.setState({
filters filters
}); });
}; }
onSaveFilterPress = () => { onSaveFilterPress = () => {
const { const {
@@ -122,7 +122,7 @@ class FilterBuilderModalContent extends Component {
label, label,
filters filters
}); });
}; }
// //
// Render // Render
@@ -138,7 +138,7 @@ class FilterBuilderRow extends Component {
this.selectedFilterBuilderProp = selectedFilterBuilderProp; this.selectedFilterBuilderProp = selectedFilterBuilderProp;
onFilterChange(index, filter); onFilterChange(index, filter);
}; }
onFilterChange = ({ name, value }) => { onFilterChange = ({ name, value }) => {
const { const {
@@ -158,7 +158,7 @@ class FilterBuilderRow extends Component {
filter[name] = value; filter[name] = value;
onFilterChange(index, filter); onFilterChange(index, filter);
}; }
onAddPress = () => { onAddPress = () => {
const { const {
@@ -167,7 +167,7 @@ class FilterBuilderRow extends Component {
} = this.props; } = this.props;
onAddPress(index); onAddPress(index);
}; }
onRemovePress = () => { onRemovePress = () => {
const { const {
@@ -176,7 +176,7 @@ class FilterBuilderRow extends Component {
} = this.props; } = this.props;
onRemovePress(index); onRemovePress(index);
}; }
// //
// Render // Render
@@ -84,7 +84,7 @@ class FilterBuilderRowValue extends Component {
name: NAME, name: NAME,
value: [...filterValue, value] value: [...filterValue, value]
}); });
}; }
onTagDelete = ({ index }) => { onTagDelete = ({ index }) => {
const { const {
@@ -98,7 +98,7 @@ class FilterBuilderRowValue extends Component {
name: NAME, name: NAME,
value value
}); });
}; }
// //
// Render // Render
@@ -47,7 +47,7 @@ class IndexerFilterBuilderRowValueConnector extends Component {
if (!this.props.isPopulated) { if (!this.props.isPopulated) {
this.props.dispatchFetchIndexers(); this.props.dispatchFetchIndexers();
} }
}; }
// //
// Render // Render
@@ -55,7 +55,7 @@ class CustomFilter extends Component {
} = this.props; } = this.props;
onEditPress(id); onEditPress(id);
}; }
onRemovePress = () => { onRemovePress = () => {
const { const {
@@ -67,7 +67,7 @@ class CustomFilter extends Component {
dispatchDeleteCustomFilter({ id }); dispatchDeleteCustomFilter({ id });
}); });
}; }
// //
// Render // Render
@@ -25,14 +25,14 @@ class FilterModal extends Component {
this.setState({ this.setState({
filterBuilder: true filterBuilder: true
}); });
}; }
onEditCustomFilter = (id) => { onEditCustomFilter = (id) => {
this.setState({ this.setState({
filterBuilder: true, filterBuilder: true,
id id
}); });
}; }
onCancelPress = () => { onCancelPress = () => {
if (this.state.filterBuilder) { if (this.state.filterBuilder) {
@@ -43,7 +43,7 @@ class FilterModal extends Component {
} else { } else {
this.onModalClose(); this.onModalClose();
} }
}; }
onModalClose = () => { onModalClose = () => {
this.setState({ this.setState({
@@ -52,7 +52,7 @@ class FilterModal extends Component {
}, () => { }, () => {
this.props.onModalClose(); this.props.onModalClose();
}); });
}; }
// //
// Render // Render
@@ -69,7 +69,7 @@ class AppProfileSelectInputConnector extends Component {
onChange = ({ name, value }) => { onChange = ({ name, value }) => {
this.props.onChange({ name, value: parseInt(value) }); this.props.onChange({ name, value: parseInt(value) });
}; }
// //
// Render // Render
@@ -35,11 +35,11 @@ class AutoCompleteInput extends Component {
name: this.props.name, name: this.props.name,
value: newValue value: newValue
}); });
}; }
onInputBlur = () => { onInputBlur = () => {
this.setState({ suggestions: [] }); this.setState({ suggestions: [] });
}; }
onSuggestionsFetchRequested = ({ value }) => { onSuggestionsFetchRequested = ({ value }) => {
const { values } = this.props; const { values } = this.props;
@@ -50,11 +50,11 @@ class AutoCompleteInput extends Component {
}); });
this.setState({ suggestions: filteredValues }); this.setState({ suggestions: filteredValues });
}; }
onSuggestionsClearRequested = () => { onSuggestionsClearRequested = () => {
this.setState({ suggestions: [] }); this.setState({ suggestions: [] });
}; }
// //
// Render // Render
@@ -49,7 +49,7 @@ class AutoSuggestInput extends Component {
}} }}
</Reference> </Reference>
); );
}; }
renderSuggestionsContainer = ({ containerProps, children }) => { renderSuggestionsContainer = ({ containerProps, children }) => {
return ( return (
@@ -90,7 +90,7 @@ class AutoSuggestInput extends Component {
</Popper> </Popper>
</Portal> </Portal>
); );
}; }
// //
// Listeners // Listeners
@@ -113,14 +113,14 @@ class AutoSuggestInput extends Component {
data.styles.width = width; data.styles.width = width;
return data; return data;
}; }
onInputChange = (event, { newValue }) => { onInputChange = (event, { newValue }) => {
this.props.onChange({ this.props.onChange({
name: this.props.name, name: this.props.name,
value: newValue value: newValue
}); });
}; }
onInputKeyDown = (event) => { onInputKeyDown = (event) => {
const { const {
@@ -144,7 +144,7 @@ class AutoSuggestInput extends Component {
}); });
} }
} }
}; }
// //
// Render // Render
@@ -39,7 +39,7 @@ class CaptchaInputConnector extends Component {
componentWillUnmount = () => { componentWillUnmount = () => {
this.props.resetCaptcha(); this.props.resetCaptcha();
}; }
// //
// Listeners // Listeners
@@ -51,7 +51,7 @@ class CaptchaInputConnector extends Component {
} = this.props; } = this.props;
this.props.refreshCaptcha({ provider, providerData }); this.props.refreshCaptcha({ provider, providerData });
}; }
onCaptchaChange = (captchaResponse) => { onCaptchaChange = (captchaResponse) => {
// If the captcha has expired `captchaResponse` will be null. // If the captcha has expired `captchaResponse` will be null.
@@ -68,7 +68,7 @@ class CaptchaInputConnector extends Component {
} = this.props; } = this.props;
this.props.getCaptchaCookie({ provider, providerData, captchaResponse }); this.props.getCaptchaCookie({ provider, providerData, captchaResponse });
}; }
// //
// Render // Render
@@ -31,7 +31,7 @@ class CardigannCaptchaInputConnector extends Component {
componentWillUnmount = () => { componentWillUnmount = () => {
this.props.resetCaptcha(); this.props.resetCaptcha();
}; }
// //
// Listeners // Listeners
@@ -48,7 +48,7 @@ class CardigannCaptchaInputConnector extends Component {
this.props.resetCaptcha(); this.props.resetCaptcha();
this.props.refreshCaptcha({ provider, providerData }); this.props.refreshCaptcha({ provider, providerData });
}; }
// //
// Render // Render
+4 -4
View File
@@ -59,14 +59,14 @@ class CheckInput extends Component {
shiftKey shiftKey
}); });
} }
}; }
// //
// Listeners // Listeners
setRef = (ref) => { setRef = (ref) => {
this._checkbox = ref; this._checkbox = ref;
}; }
onClick = (event) => { onClick = (event) => {
if (this.props.isDisabled) { if (this.props.isDisabled) {
@@ -78,14 +78,14 @@ class CheckInput extends Component {
event.preventDefault(); event.preventDefault();
this.toggleChecked(checked, shiftKey); this.toggleChecked(checked, shiftKey);
}; }
onChange = (event) => { onChange = (event) => {
const checked = event.target.checked; const checked = event.target.checked;
const shiftKey = event.nativeEvent.shiftKey; const shiftKey = event.nativeEvent.shiftKey;
this.toggleChecked(checked, shiftKey); this.toggleChecked(checked, shiftKey);
}; }
// //
// Render // Render
+2 -2
View File
@@ -23,7 +23,7 @@ class DeviceInput extends Component {
name, name,
value: [...value, deviceId] value: [...value, deviceId]
}); });
}; }
onTagDelete = ({ index }) => { onTagDelete = ({ index }) => {
const { const {
@@ -39,7 +39,7 @@ class DeviceInput extends Component {
name, name,
value: newValue value: newValue
}); });
}; }
// //
// Render // Render
@@ -48,11 +48,11 @@ class DeviceInputConnector extends Component {
componentDidMount = () => { componentDidMount = () => {
this._populate(); this._populate();
}; }
componentWillUnmount = () => { componentWillUnmount = () => {
this.props.dispatchClearOptions({ section: 'devices' }); this.props.dispatchClearOptions({ section: 'devices' });
}; }
// //
// Control // Control
@@ -77,7 +77,7 @@ class DeviceInputConnector extends Component {
onRefreshPress = () => { onRefreshPress = () => {
this._populate(); this._populate();
}; }
// //
// Render // Render
@@ -149,7 +149,7 @@ class EnhancedSelectInput extends Component {
} }
return data; return data;
}; }
onWindowClick = (event) => { onWindowClick = (event) => {
const button = document.getElementById(this._buttonId); const button = document.getElementById(this._buttonId);
@@ -168,14 +168,14 @@ class EnhancedSelectInput extends Component {
this.setState({ isOpen: false }); this.setState({ isOpen: false });
this._removeListener(); this._removeListener();
} }
}; }
onFocus = () => { onFocus = () => {
if (this.state.isOpen) { if (this.state.isOpen) {
this._removeListener(); this._removeListener();
this.setState({ isOpen: false }); this.setState({ isOpen: false });
} }
}; }
onBlur = () => { onBlur = () => {
if (!this.props.isEditable) { if (!this.props.isEditable) {
@@ -186,7 +186,7 @@ class EnhancedSelectInput extends Component {
this.setState({ selectedIndex: origIndex }); this.setState({ selectedIndex: origIndex });
} }
} }
}; }
onKeyDown = (event) => { onKeyDown = (event) => {
const { const {
@@ -253,7 +253,7 @@ class EnhancedSelectInput extends Component {
if (!_.isEmpty(newState)) { if (!_.isEmpty(newState)) {
this.setState(newState); this.setState(newState);
} }
}; }
onPress = () => { onPress = () => {
if (this.state.isOpen) { if (this.state.isOpen) {
@@ -267,7 +267,7 @@ class EnhancedSelectInput extends Component {
} }
this.setState({ isOpen: !this.state.isOpen }); this.setState({ isOpen: !this.state.isOpen });
}; }
onSelect = (value) => { onSelect = (value) => {
if (Array.isArray(this.props.value)) { if (Array.isArray(this.props.value)) {
@@ -291,15 +291,15 @@ class EnhancedSelectInput extends Component {
value value
}); });
} }
}; }
onMeasure = ({ width }) => { onMeasure = ({ width }) => {
this.setState({ width }); this.setState({ width });
}; }
onOptionsModalClose = () => { onOptionsModalClose = () => {
this.setState({ isOpen: false }); this.setState({ isOpen: false });
}; }
// //
// Render // Render
@@ -73,7 +73,7 @@ class EnhancedSelectInputConnector extends Component {
componentDidMount = () => { componentDidMount = () => {
this._populate(); this._populate();
}; }
componentDidUpdate = (prevProps) => { componentDidUpdate = (prevProps) => {
const prevKey = getProviderDataKey(prevProps.providerData); const prevKey = getProviderDataKey(prevProps.providerData);
@@ -82,11 +82,11 @@ class EnhancedSelectInputConnector extends Component {
if (!_.isEqual(prevKey, nextKey)) { if (!_.isEqual(prevKey, nextKey)) {
this.setState({ refetchRequired: true }); this.setState({ refetchRequired: true });
} }
}; }
componentWillUnmount = () => { componentWillUnmount = () => {
this._cleanup(); this._cleanup();
}; }
// //
// Listeners // Listeners
@@ -95,7 +95,7 @@ class EnhancedSelectInputConnector extends Component {
if (this.state.refetchRequired) { if (this.state.refetchRequired) {
this._populate(); this._populate();
} }
}; }
// //
// Control // Control
@@ -21,11 +21,11 @@ class EnhancedSelectInputOption extends Component {
} = this.props; } = this.props;
onSelect(id); onSelect(id);
}; }
onCheckPress = () => { onCheckPress = () => {
// CheckInput requires a handler. Swallow the change event because onPress will already handle it via event propagation. // CheckInput requires a handler. Swallow the change event because onPress will already handle it via event propagation.
}; }
// //
// Render // Render
@@ -16,6 +16,7 @@ import FormInputHelpText from './FormInputHelpText';
import IndexerFlagsSelectInputConnector from './IndexerFlagsSelectInputConnector'; import IndexerFlagsSelectInputConnector from './IndexerFlagsSelectInputConnector';
import InfoInput from './InfoInput'; import InfoInput from './InfoInput';
import KeyValueListInput from './KeyValueListInput'; import KeyValueListInput from './KeyValueListInput';
import MovieMonitoredSelectInput from './MovieMonitoredSelectInput';
import NumberInput from './NumberInput'; import NumberInput from './NumberInput';
import OAuthInputConnector from './OAuthInputConnector'; import OAuthInputConnector from './OAuthInputConnector';
import PasswordInput from './PasswordInput'; import PasswordInput from './PasswordInput';
@@ -68,6 +69,9 @@ function getComponent(type) {
case inputTypes.PATH: case inputTypes.PATH:
return PathInputConnector; return PathInputConnector;
case inputTypes.MOVIE_MONITORED_SELECT:
return MovieMonitoredSelectInput;
case inputTypes.INDEXER_FLAGS_SELECT: case inputTypes.INDEXER_FLAGS_SELECT:
return IndexerFlagsSelectInputConnector; return IndexerFlagsSelectInputConnector;
@@ -25,7 +25,7 @@ function FormInputHelpText(props) {
isCheckInput && styles.isCheckInput isCheckInput && styles.isCheckInput
)} )}
> >
<div dangerouslySetInnerHTML={{ __html: text }} /> {text}
{ {
link ? link ?
@@ -43,7 +43,7 @@ class IndexerFlagsSelectInputConnector extends Component {
}); });
this.props.onChange({ name, value: indexerFlags }); this.props.onChange({ name, value: indexerFlags });
}; }
// //
// Render // Render
@@ -43,7 +43,7 @@ class IndexersSelectInputConnector extends Component {
onChange = ({ name, value }) => { onChange = ({ name, value }) => {
this.props.onChange({ name, value }); this.props.onChange({ name, value });
}; }
// //
// Render // Render
@@ -11,6 +11,8 @@ class InfoInput extends Component {
value value
} = this.props; } = this.props;
console.log(this.props);
return ( return (
<span dangerouslySetInnerHTML={{ __html: value }} /> <span dangerouslySetInnerHTML={{ __html: value }} />
); );
@@ -39,7 +39,7 @@ class KeyValueListInput extends Component {
name, name,
value: newValue value: newValue
}); });
}; }
onRemoveItem = (index) => { onRemoveItem = (index) => {
const { const {
@@ -55,13 +55,13 @@ class KeyValueListInput extends Component {
name, name,
value: newValue value: newValue
}); });
}; }
onFocus = () => { onFocus = () => {
this.setState({ this.setState({
isFocused: true isFocused: true
}); });
}; }
onBlur = () => { onBlur = () => {
this.setState({ this.setState({
@@ -88,7 +88,7 @@ class KeyValueListInput extends Component {
value: newValue value: newValue
}); });
} }
}; }
// //
// Render // Render
@@ -18,7 +18,7 @@ class KeyValueListInputItem extends Component {
} = this.props; } = this.props;
onChange(index, { key: keyValue, value }); onChange(index, { key: keyValue, value });
}; }
onValueChange = ({ value }) => { onValueChange = ({ value }) => {
// TODO: Validate here or validate at a lower level component // TODO: Validate here or validate at a lower level component
@@ -30,7 +30,7 @@ class KeyValueListInputItem extends Component {
} = this.props; } = this.props;
onChange(index, { key: keyValue, value }); onChange(index, { key: keyValue, value });
}; }
onRemovePress = () => { onRemovePress = () => {
const { const {
@@ -39,15 +39,15 @@ class KeyValueListInputItem extends Component {
} = this.props; } = this.props;
onRemove(index); onRemove(index);
}; }
onFocus = () => { onFocus = () => {
this.props.onFocus(); this.props.onFocus();
}; }
onBlur = () => { onBlur = () => {
this.props.onBlur(); this.props.onBlur();
}; }
// //
// Render // Render
@@ -0,0 +1,52 @@
import PropTypes from 'prop-types';
import React from 'react';
import SelectInput from './SelectInput';
const monitorTypesOptions = [
{ key: 'true', value: 'True' },
{ key: 'false', value: 'False' }
];
function MovieMonitoredSelectInput(props) {
const values = [...monitorTypesOptions];
const {
includeNoChange,
includeMixed
} = props;
if (includeNoChange) {
values.unshift({
key: 'noChange',
value: 'No Change',
disabled: true
});
}
if (includeMixed) {
values.unshift({
key: 'mixed',
value: '(Mixed)',
disabled: true
});
}
return (
<SelectInput
{...props}
values={values}
/>
);
}
MovieMonitoredSelectInput.propTypes = {
includeNoChange: PropTypes.bool.isRequired,
includeMixed: PropTypes.bool.isRequired
};
MovieMonitoredSelectInput.defaultProps = {
includeNoChange: false,
includeMixed: false
};
export default MovieMonitoredSelectInput;
@@ -42,7 +42,7 @@ class IndexersSelectInputConnector extends Component {
onChange = ({ name, value }) => { onChange = ({ name, value }) => {
this.props.onChange({ name, value }); this.props.onChange({ name, value });
}; }
// //
// Render // Render
+3 -3
View File
@@ -59,11 +59,11 @@ class NumberInput extends Component {
value: parseValue(this.props, value) value: parseValue(this.props, value)
}); });
}; }
onFocus = () => { onFocus = () => {
this.setState({ isFocused: true }); this.setState({ isFocused: true });
}; }
onBlur = () => { onBlur = () => {
const { const {
@@ -88,7 +88,7 @@ class NumberInput extends Component {
name, name,
value: parsedValue value: parsedValue
}); });
}; }
// //
// Render // Render
@@ -41,7 +41,7 @@ class OAuthInputConnector extends Component {
componentWillUnmount = () => { componentWillUnmount = () => {
this.props.resetOAuth(); this.props.resetOAuth();
}; }
// //
// Listeners // Listeners
@@ -60,7 +60,7 @@ class OAuthInputConnector extends Component {
providerData, providerData,
section section
}); });
}; }
// //
// Render // Render
+8 -8
View File
@@ -62,7 +62,7 @@ class PathInput extends Component {
onInputChange = ({ value }) => { onInputChange = ({ value }) => {
this.setState({ value }); this.setState({ value });
}; }
onInputKeyDown = (event) => { onInputKeyDown = (event) => {
if (event.key === 'Tab') { if (event.key === 'Tab') {
@@ -80,7 +80,7 @@ class PathInput extends Component {
} }
} }
} }
}; }
onInputBlur = () => { onInputBlur = () => {
this.props.onChange({ this.props.onChange({
@@ -89,28 +89,28 @@ class PathInput extends Component {
}); });
this.props.onClearPaths(); this.props.onClearPaths();
}; }
onSuggestionsFetchRequested = ({ value }) => { onSuggestionsFetchRequested = ({ value }) => {
this.props.onFetchPaths(value); this.props.onFetchPaths(value);
}; }
onSuggestionsClearRequested = () => { onSuggestionsClearRequested = () => {
// Required because props aren't always rendered, but no-op // Required because props aren't always rendered, but no-op
// because we don't want to reset the paths after a path is selected. // because we don't want to reset the paths after a path is selected.
}; }
onSuggestionSelected = (event, { suggestionValue }) => { onSuggestionSelected = (event, { suggestionValue }) => {
this.props.onFetchPaths(suggestionValue); this.props.onFetchPaths(suggestionValue);
}; }
onFileBrowserOpenPress = () => { onFileBrowserOpenPress = () => {
this.setState({ isFileBrowserModalOpen: true }); this.setState({ isFileBrowserModalOpen: true });
}; }
onFileBrowserModalClose = () => { onFileBrowserModalClose = () => {
this.setState({ isFileBrowserModalOpen: false }); this.setState({ isFileBrowserModalOpen: false });
}; }
// //
// Render // Render
@@ -47,11 +47,11 @@ class PathInputConnector extends Component {
path, path,
includeFiles includeFiles
}); });
}; }
onClearPaths = () => { onClearPaths = () => {
this.props.dispatchClearPaths(); this.props.dispatchClearPaths();
}; }
// //
// Render // Render
@@ -53,8 +53,7 @@ function getSelectValues(selectOptions) {
result.push({ result.push({
key: option.value, key: option.value,
value: option.name, value: option.name,
hint: option.hint, hint: option.hint
parentKey: option.parentValue
}); });
return result; return result;
+1 -1
View File
@@ -13,7 +13,7 @@ class SelectInput extends Component {
name: this.props.name, name: this.props.name,
value: event.target.value value: event.target.value
}); });
}; }
// //
// Render // Render
+12 -12
View File
@@ -49,7 +49,7 @@ class TagInput extends Component {
_setAutosuggestRef = (ref) => { _setAutosuggestRef = (ref) => {
this._autosuggestRef = ref; this._autosuggestRef = ref;
}; }
getSuggestionValue({ name }) { getSuggestionValue({ name }) {
return name; return name;
@@ -57,7 +57,7 @@ class TagInput extends Component {
shouldRenderSuggestions = (value) => { shouldRenderSuggestions = (value) => {
return value.length >= this.props.minQueryLength; return value.length >= this.props.minQueryLength;
}; }
renderSuggestion({ name }) { renderSuggestion({ name }) {
return name; return name;
@@ -70,14 +70,14 @@ class TagInput extends Component {
value: '', value: '',
suggestions: [] suggestions: []
}); });
}, 250, { leading: true, trailing: false }); }, 250, { leading: true, trailing: false })
// //
// Listeners // Listeners
onInputContainerPress = () => { onInputContainerPress = () => {
this._autosuggestRef.input.focus(); this._autosuggestRef.input.focus();
}; }
onInputChange = (event, { newValue, method }) => { onInputChange = (event, { newValue, method }) => {
const value = _.isObject(newValue) ? newValue.name : newValue; const value = _.isObject(newValue) ? newValue.name : newValue;
@@ -85,7 +85,7 @@ class TagInput extends Component {
if (method === 'type') { if (method === 'type') {
this.setState({ value }); this.setState({ value });
} }
}; }
onInputKeyDown = (event) => { onInputKeyDown = (event) => {
const { const {
@@ -125,11 +125,11 @@ class TagInput extends Component {
event.preventDefault(); event.preventDefault();
} }
} }
}; }
onInputFocus = () => { onInputFocus = () => {
this.setState({ isFocused: true }); this.setState({ isFocused: true });
}; }
onInputBlur = () => { onInputBlur = () => {
this.setState({ isFocused: false }); this.setState({ isFocused: false });
@@ -153,7 +153,7 @@ class TagInput extends Component {
if (tag) { if (tag) {
this.addTag(tag); this.addTag(tag);
} }
}; }
onSuggestionsFetchRequested = ({ value }) => { onSuggestionsFetchRequested = ({ value }) => {
const lowerCaseValue = value.toLowerCase(); const lowerCaseValue = value.toLowerCase();
@@ -170,16 +170,16 @@ class TagInput extends Component {
}); });
this.setState({ suggestions }); this.setState({ suggestions });
}; }
onSuggestionsClearRequested = () => { onSuggestionsClearRequested = () => {
// Required because props aren't always rendered, but no-op // Required because props aren't always rendered, but no-op
// because we don't want to reset the paths after a path is selected. // because we don't want to reset the paths after a path is selected.
}; }
onSuggestionSelected = (event, { suggestion }) => { onSuggestionSelected = (event, { suggestion }) => {
this.addTag(suggestion); this.addTag(suggestion);
}; }
// //
// Render // Render
@@ -204,7 +204,7 @@ class TagInput extends Component {
onInputContainerPress={this.onInputContainerPress} onInputContainerPress={this.onInputContainerPress}
/> />
); );
}; }
render() { render() {
const { const {
@@ -101,7 +101,7 @@ class TagInputConnector extends Component {
newValue.push(tag.id); newValue.push(tag.id);
this.props.onChange({ name, value: newValue }); this.props.onChange({ name, value: newValue });
}; }
onTagDelete = ({ index }) => { onTagDelete = ({ index }) => {
const { const {
@@ -116,7 +116,7 @@ class TagInputConnector extends Component {
name, name,
value: newValue value: newValue
}); });
}; }
onTagCreated = (tag) => { onTagCreated = (tag) => {
const { const {
@@ -128,7 +128,7 @@ class TagInputConnector extends Component {
newValue.push(tag.id); newValue.push(tag.id);
this.props.onChange({ name, value: newValue }); this.props.onChange({ name, value: newValue });
}; }
// //
// Render // Render
@@ -19,7 +19,7 @@ class TagInputInput extends Component {
} }
onInputContainerPress(); onInputContainerPress();
}; }
render() { render() {
const { const {
+1 -1
View File
@@ -22,7 +22,7 @@ class TagInputTag extends Component {
index, index,
id: tag.id id: tag.id
}); });
}; }
// //
// Render // Render
@@ -60,7 +60,7 @@ class TagSelectInputConnector extends Component {
} }
this.props.onChange({ name, value: newValue }); this.props.onChange({ name, value: newValue });
}; }
onTagDelete = ({ index }) => { onTagDelete = ({ index }) => {
const { const {
@@ -75,7 +75,7 @@ class TagSelectInputConnector extends Component {
name, name,
value: newValue value: newValue
}); });
}; }
// //
// Render // Render
+7 -7
View File
@@ -35,7 +35,7 @@ class TextArea extends Component {
setInputRef = (ref) => { setInputRef = (ref) => {
this._input = ref; this._input = ref;
}; }
selectionChange() { selectionChange() {
if (this._selectionTimeout) { if (this._selectionTimeout) {
@@ -75,7 +75,7 @@ class TextArea extends Component {
}; };
onChange(payload); onChange(payload);
}; }
onFocus = (event) => { onFocus = (event) => {
if (this.props.onFocus) { if (this.props.onFocus) {
@@ -83,19 +83,19 @@ class TextArea extends Component {
} }
this.selectionChange(); this.selectionChange();
}; }
onKeyUp = () => { onKeyUp = () => {
this.selectionChange(); this.selectionChange();
}; }
onMouseDown = () => { onMouseDown = () => {
this._isMouseTarget = true; this._isMouseTarget = true;
}; }
onMouseUp = () => { onMouseUp = () => {
this.selectionChange(); this.selectionChange();
}; }
onDocumentMouseUp = () => { onDocumentMouseUp = () => {
if (this._isMouseTarget) { if (this._isMouseTarget) {
@@ -103,7 +103,7 @@ class TextArea extends Component {
} }
this._isMouseTarget = false; this._isMouseTarget = false;
}; }
// //
// Render // Render
+7 -7
View File
@@ -35,7 +35,7 @@ class TextInput extends Component {
setInputRef = (ref) => { setInputRef = (ref) => {
this._input = ref; this._input = ref;
}; }
selectionChange() { selectionChange() {
if (this._selectionTimeout) { if (this._selectionTimeout) {
@@ -82,7 +82,7 @@ class TextInput extends Component {
} }
onChange(payload); onChange(payload);
}; }
onFocus = (event) => { onFocus = (event) => {
if (this.props.onFocus) { if (this.props.onFocus) {
@@ -90,19 +90,19 @@ class TextInput extends Component {
} }
this.selectionChange(); this.selectionChange();
}; }
onKeyUp = () => { onKeyUp = () => {
this.selectionChange(); this.selectionChange();
}; }
onMouseDown = () => { onMouseDown = () => {
this._isMouseTarget = true; this._isMouseTarget = true;
}; }
onMouseUp = () => { onMouseUp = () => {
this.selectionChange(); this.selectionChange();
}; }
onDocumentMouseUp = () => { onDocumentMouseUp = () => {
if (this._isMouseTarget) { if (this._isMouseTarget) {
@@ -110,7 +110,7 @@ class TextInput extends Component {
} }
this._isMouseTarget = false; this._isMouseTarget = false;
}; }
// //
// Render // Render
@@ -53,7 +53,7 @@ class TextTagInputConnector extends Component {
}); });
onChange({ name, value: newValue.join(',') }); onChange({ name, value: newValue.join(',') });
}; }
onTagDelete = ({ index }) => { onTagDelete = ({ index }) => {
const { const {
@@ -69,7 +69,7 @@ class TextTagInputConnector extends Component {
name, name,
value: newValue.join(',') value: newValue.join(',')
}); });
}; }
// //
// Render // Render
@@ -63,7 +63,7 @@ class ClipboardButton extends Component {
showSuccess: false, showSuccess: false,
showError: false showError: false
}); });
}; }
// //
// Listeners // Listeners
@@ -72,13 +72,13 @@ class ClipboardButton extends Component {
this.setState({ this.setState({
showSuccess: true showSuccess: true
}); });
}; }
onError = () => { onError = () => {
this.setState({ this.setState({
showError: true showError: true
}); });
}; }
// //
// Render // Render
+1 -1
View File
@@ -18,7 +18,7 @@ class Link extends Component {
if (!isDisabled && onPress) { if (!isDisabled && onPress) {
onPress(event); onPress(event);
} }
}; }
// //
// Render // Render
@@ -90,7 +90,7 @@ class SpinnerErrorButton extends Component {
hasWarning: false, hasWarning: false,
hasError: false hasError: false
}); });
}; }
// //
// Render // Render
+1 -1
View File
@@ -17,7 +17,7 @@ class Measure extends Component {
onMeasure = _.debounce((payload) => { onMeasure = _.debounce((payload) => {
this.props.onMeasure(payload); this.props.onMeasure(payload);
}, 250, { leading: true, trailing: false }); }, 250, { leading: true, trailing: false })
// //
// Render // Render
+2 -2
View File
@@ -25,11 +25,11 @@ class FilterMenu extends Component {
onCustomFiltersPress = () => { onCustomFiltersPress = () => {
this.setState({ isFilterModalOpen: true }); this.setState({ isFilterModalOpen: true });
}; }
onFiltersModalClose = () => { onFiltersModalClose = () => {
this.setState({ isFilterModalOpen: false }); this.setState({ isFilterModalOpen: false });
}; }
// //
// Render // Render
@@ -14,7 +14,7 @@ class FilterMenuItem extends Component {
} = this.props; } = this.props;
onPress(filterKey); onPress(filterKey);
}; }
// //
// Render // Render
+5 -5
View File
@@ -124,7 +124,7 @@ class Menu extends Component {
this.setState({ isMenuOpen: false }); this.setState({ isMenuOpen: false });
this._removeListener(); this._removeListener();
} }
}; }
onTouchStart = (event) => { onTouchStart = (event) => {
const menuButton = document.getElementById(this._menuButtonId); const menuButton = document.getElementById(this._menuButtonId);
@@ -148,17 +148,17 @@ class Menu extends Component {
this.setState({ isMenuOpen: false }); this.setState({ isMenuOpen: false });
this._removeListener(); this._removeListener();
} }
}; }
onWindowResize = () => { onWindowResize = () => {
this.setMaxHeight(); this.setMaxHeight();
}; }
onWindowScroll = (event) => { onWindowScroll = (event) => {
if (this.state.isMenuOpen) { if (this.state.isMenuOpen) {
this.setMaxHeight(); this.setMaxHeight();
} }
}; }
onMenuButtonPress = () => { onMenuButtonPress = () => {
const state = { const state = {
@@ -173,7 +173,7 @@ class Menu extends Component {
} }
this.setState(state); this.setState(state);
}; }
// //
// Render // Render
@@ -14,7 +14,7 @@ class SearchMenuItem extends Component {
} = this.props; } = this.props;
onPress(name); onPress(name);
}; }
// //
// Render // Render
@@ -17,7 +17,7 @@ class SelectedMenuItem extends Component {
} = this.props; } = this.props;
onPress(name); onPress(name);
}; }
// //
// Render // Render
+4 -4
View File
@@ -66,7 +66,7 @@ class Modal extends Component {
_setBackgroundRef = (ref) => { _setBackgroundRef = (ref) => {
this._backgroundRef = ref; this._backgroundRef = ref;
}; }
_openModal() { _openModal() {
openModals.push(this._modalId); openModals.push(this._modalId);
@@ -131,7 +131,7 @@ class Modal extends Component {
onBackdropBeginPress = (event) => { onBackdropBeginPress = (event) => {
this._isBackdropPressed = this._isBackdropTarget(event); this._isBackdropPressed = this._isBackdropTarget(event);
}; }
onBackdropEndPress = (event) => { onBackdropEndPress = (event) => {
const { const {
@@ -148,7 +148,7 @@ class Modal extends Component {
} }
this._isBackdropPressed = false; this._isBackdropPressed = false;
}; }
onKeyDown = (event) => { onKeyDown = (event) => {
const keyCode = event.keyCode; const keyCode = event.keyCode;
@@ -161,7 +161,7 @@ class Modal extends Component {
this.props.onModalClose(); this.props.onModalClose();
} }
} }
}; }
// //
// Render // Render
@@ -36,12 +36,12 @@ class IndexerSearchInput extends Component {
setAutosuggestRef = (ref) => { setAutosuggestRef = (ref) => {
this._autosuggest = ref; this._autosuggest = ref;
}; }
focusInput = (event) => { focusInput = (event) => {
event.preventDefault(); event.preventDefault();
this._autosuggest.input.focus(); this._autosuggest.input.focus();
}; }
getSectionSuggestions(section) { getSectionSuggestions(section) {
return section.suggestions; return section.suggestions;
@@ -102,7 +102,7 @@ class IndexerSearchInput extends Component {
} }
this.setState({ value: newValue }); this.setState({ value: newValue });
}; }
onKeyDown = (event) => { onKeyDown = (event) => {
if (event.shiftKey || event.altKey || event.ctrlKey) { if (event.shiftKey || event.altKey || event.ctrlKey) {
@@ -137,31 +137,31 @@ class IndexerSearchInput extends Component {
this._autosuggest.input.blur(); this._autosuggest.input.blur();
this.reset(); this.reset();
}; }
onBlur = () => { onBlur = () => {
this.reset(); this.reset();
}; }
onSuggestionsClearRequested = () => { onSuggestionsClearRequested = () => {
this.setState({ this.setState({
suggestions: [], suggestions: [],
loading: false loading: false
}); });
}; }
onSuggestionsFetchRequested = () => { onSuggestionsFetchRequested = () => {
this.setState({ this.setState({
suggestions: [], suggestions: [],
loading: false loading: false
}); });
}; }
onSuggestionSelected = (event, { suggestion }) => { onSuggestionSelected = (event, { suggestion }) => {
if (suggestion.type === ADD_NEW_TYPE) { if (suggestion.type === ADD_NEW_TYPE) {
this.props.onGoToAddNewMovie(this.state.value); this.props.onGoToAddNewMovie(this.state.value);
} }
}; }
// //
// Render // Render
@@ -60,7 +60,7 @@ function createMapStateToProps() {
function createMapDispatchToProps(dispatch, props) { function createMapDispatchToProps(dispatch, props) {
return { return {
onGoToAddNewMovie(query) { onGoToAddNewMovie(query) {
dispatch(setSearchDefault({ searchQuery: query })); dispatch(setSearchDefault({ searchQuery: query, searchIndexerIds: [-1, -2] }));
dispatch(push(`${window.Prowlarr.urlBase}/search`)); dispatch(push(`${window.Prowlarr.urlBase}/search`));
} }
}; };
@@ -32,14 +32,14 @@ class PageHeader extends Component {
onOpenKeyboardShortcutsModal = () => { onOpenKeyboardShortcutsModal = () => {
this.setState({ isKeyboardShortcutsModalOpen: true }); this.setState({ isKeyboardShortcutsModalOpen: true });
}; }
// //
// Listeners // Listeners
onKeyboardShortcutsModalClose = () => { onKeyboardShortcutsModalClose = () => {
this.setState({ isKeyboardShortcutsModalOpen: false }); this.setState({ isKeyboardShortcutsModalOpen: false });
}; }
// //
// Render // Render
@@ -28,11 +28,11 @@ class PageHeaderActionsMenuConnector extends Component {
onRestartPress = () => { onRestartPress = () => {
this.props.restart(); this.props.restart();
}; }
onShutdownPress = () => { onShutdownPress = () => {
this.props.shutdown(); this.props.shutdown();
}; }
// //
// Render // Render
+3 -3
View File
@@ -54,15 +54,15 @@ class Page extends Component {
width: window.innerWidth, width: window.innerWidth,
height: window.innerHeight height: window.innerHeight
}); });
}; }
onUpdatedModalClose = () => { onUpdatedModalClose = () => {
this.setState({ isUpdatedModalOpen: false }); this.setState({ isUpdatedModalOpen: false });
}; }
onConnectionLostModalClose = () => { onConnectionLostModalClose = () => {
this.setState({ isConnectionLostModalOpen: false }); this.setState({ isConnectionLostModalOpen: false });
}; }
// //
// Render // Render
@@ -232,7 +232,7 @@ class PageConnector extends Component {
onSidebarToggle = () => { onSidebarToggle = () => {
this.props.onSidebarVisibleChange(!this.props.isSidebarVisible); this.props.onSidebarVisibleChange(!this.props.isSidebarVisible);
}; }
// //
// Render // Render
@@ -27,7 +27,7 @@ class PageContentBody extends Component {
if (this.props.onScroll && !isLocked()) { if (this.props.onScroll && !isLocked()) {
onScroll(props); onScroll(props);
} }
}; }
// //
// Render // Render
+1 -1
View File
@@ -101,7 +101,7 @@ class PageJumpBar extends Component {
onMeasure = ({ height }) => { onMeasure = ({ height }) => {
this.setState({ height }); this.setState({ height });
}; }
// //
// Render // Render
@@ -15,7 +15,7 @@ class PageJumpBarItem extends Component {
} = this.props; } = this.props;
onItemPress(label); onItemPress(label);
}; }
// //
// Render // Render
@@ -13,8 +13,20 @@ function getIconName(name) {
return icons.BACKUP; return icons.BACKUP;
case 'CheckHealth': case 'CheckHealth':
return icons.HEALTH; return icons.HEALTH;
case 'EpisodeSearch':
return icons.SEARCH;
case 'Housekeeping': case 'Housekeeping':
return icons.HOUSEKEEPING; return icons.HOUSEKEEPING;
case 'RefreshMovie':
return icons.REFRESH;
case 'RssSync':
return icons.RSS;
case 'SeasonSearch':
return icons.SEARCH;
case 'MovieSearch':
return icons.SEARCH;
case 'UpdateSceneMapping':
return icons.REFRESH;
default: default:
return icons.SPINNER; return icons.SPINNER;
} }
@@ -35,11 +35,11 @@ class MessageConnector extends Component {
if (hideAfter) { if (hideAfter) {
this._hideTimeoutId = setTimeout(this.hideMessage, hideAfter * 1000); this._hideTimeoutId = setTimeout(this.hideMessage, hideAfter * 1000);
} }
}; }
hideMessage = () => { hideMessage = () => {
this.props.hideMessage({ id: this.props.id }); this.props.hideMessage({ id: this.props.id });
}; }
// //
// Render // Render
@@ -48,10 +48,6 @@ const links = [
title: translate('Settings'), title: translate('Settings'),
to: '/settings', to: '/settings',
children: [ children: [
{
title: translate('Indexers'),
to: '/settings/indexers'
},
{ {
title: translate('Apps'), title: translate('Apps'),
to: '/settings/applications' to: '/settings/applications'
@@ -234,7 +230,7 @@ class PageSidebar extends Component {
_setSidebarRef = (ref) => { _setSidebarRef = (ref) => {
this._sidebarRef = ref; this._sidebarRef = ref;
}; }
_setSidebarTransform(isSidebarVisible, transition, callback) { _setSidebarTransform(isSidebarVisible, transition, callback) {
this.setState({ this.setState({
@@ -263,11 +259,11 @@ class PageSidebar extends Component {
event.stopPropagation(); event.stopPropagation();
this.props.onSidebarVisibleChange(false); this.props.onSidebarVisibleChange(false);
} }
}; }
onWindowScroll = () => { onWindowScroll = () => {
this.setState(getPositioning()); this.setState(getPositioning());
}; }
onTouchStart = (event) => { onTouchStart = (event) => {
const touches = event.touches; const touches = event.touches;
@@ -287,7 +283,7 @@ class PageSidebar extends Component {
this._touchStartX = touchStartX; this._touchStartX = touchStartX;
this._touchStartY = touchStartY; this._touchStartY = touchStartY;
}; }
onTouchMove = (event) => { onTouchMove = (event) => {
const touches = event.touches; const touches = event.touches;
@@ -324,7 +320,7 @@ class PageSidebar extends Component {
transition: 'none', transition: 'none',
transform transform
}); });
}; }
onTouchEnd = (event) => { onTouchEnd = (event) => {
const touches = event.changedTouches; const touches = event.changedTouches;
@@ -344,16 +340,16 @@ class PageSidebar extends Component {
this._touchStartX = null; this._touchStartX = null;
this._touchStartY = null; this._touchStartY = null;
}; }
onTouchCancel = (event) => { onTouchCancel = (event) => {
this._touchStartX = null; this._touchStartX = null;
this._touchStartY = null; this._touchStartY = null;
}; }
onItemPress = () => { onItemPress = () => {
this.props.onSidebarVisibleChange(false); this.props.onSidebarVisibleChange(false);
}; }
// //
// Render // Render
@@ -21,7 +21,7 @@ class PageSidebarItem extends Component {
if (isChildItem || !isParentItem) { if (isChildItem || !isParentItem) {
onPress(); onPress();
} }
}; }
// //
// Render // Render
@@ -108,7 +108,7 @@ class PageToolbarSection extends Component {
isMeasured: true, isMeasured: true,
width width
}); });
}; }
// //
// Render // Render
@@ -41,7 +41,7 @@ class OverlayScroller extends Component {
if (ref) { if (ref) {
this.props.registerScroller(ref.view); this.props.registerScroller(ref.view);
} }
}; }
_renderThumb = (props) => { _renderThumb = (props) => {
return ( return (
@@ -50,7 +50,7 @@ class OverlayScroller extends Component {
{...props} {...props}
/> />
); );
}; }
_renderTrackHorizontal = ({ style, props }) => { _renderTrackHorizontal = ({ style, props }) => {
const finalStyle = { const finalStyle = {
@@ -69,7 +69,7 @@ class OverlayScroller extends Component {
{...props} {...props}
/> />
); );
}; }
_renderTrackVertical = ({ style, props }) => { _renderTrackVertical = ({ style, props }) => {
const finalStyle = { const finalStyle = {
@@ -88,7 +88,7 @@ class OverlayScroller extends Component {
{...props} {...props}
/> />
); );
}; }
_renderView = (props) => { _renderView = (props) => {
return ( return (
@@ -97,18 +97,18 @@ class OverlayScroller extends Component {
{...props} {...props}
/> />
); );
}; }
// //
// Listers // Listers
onScrollStart = () => { onScrollStart = () => {
this._isScrolling = true; this._isScrolling = true;
}; }
onScrollStop = () => { onScrollStop = () => {
this._isScrolling = false; this._isScrolling = false;
}; }
onScroll = (event) => { onScroll = (event) => {
const { const {
@@ -122,7 +122,7 @@ class OverlayScroller extends Component {
if (onScroll) { if (onScroll) {
onScroll({ scrollTop, scrollLeft }); onScroll({ scrollTop, scrollLeft });
} }
}; }
// //
// Render // Render
+1 -1
View File
@@ -38,7 +38,7 @@ class Scroller extends Component {
this._scroller = ref; this._scroller = ref;
this.props.registerScroller(ref); this.props.registerScroller(ref);
}; }
// //
// Render // Render
+16 -16
View File
@@ -139,7 +139,7 @@ class SignalRConnector extends Component {
} }
console.error(`signalR: Unable to find handler for ${name}`); console.error(`signalR: Unable to find handler for ${name}`);
}; }
handleCommand = (body) => { handleCommand = (body) => {
if (body.action === 'sync') { if (body.action === 'sync') {
@@ -158,36 +158,36 @@ class SignalRConnector extends Component {
} else { } else {
this.props.dispatchUpdateCommand(resource); this.props.dispatchUpdateCommand(resource);
} }
}; }
handleHealth = () => { handleHealth = () => {
this.props.dispatchFetchHealth(); this.props.dispatchFetchHealth();
}; }
handleIndexerstatus = () => { handleIndexerstatus = () => {
this.props.dispatchFetchIndexerStatus(); this.props.dispatchFetchIndexerStatus();
}; }
handleIndexer = (body) => { handleMovie = (body) => {
const action = body.action; const action = body.action;
const section = 'indexers'; const section = 'movies';
if (action === 'updated') { if (action === 'updated') {
this.props.dispatchUpdateItem({ section, ...body.resource }); this.props.dispatchUpdateItem({ section, ...body.resource });
} else if (action === 'deleted') { } else if (action === 'deleted') {
this.props.dispatchRemoveItem({ section, id: body.resource.id }); this.props.dispatchRemoveItem({ section, id: body.resource.id });
} }
}; }
handleVersion = (body) => { handleVersion = (body) => {
const version = body.version; const version = body.version;
this.props.dispatchSetVersion({ version }); this.props.dispatchSetVersion({ version });
}; }
handleSystemTask = () => { handleSystemTask = () => {
this.props.dispatchFetchCommands(); this.props.dispatchFetchCommands();
}; }
handleTag = (body) => { handleTag = (body) => {
if (body.action === 'sync') { if (body.action === 'sync') {
@@ -195,7 +195,7 @@ class SignalRConnector extends Component {
this.props.dispatchFetchTagDetails(); this.props.dispatchFetchTagDetails();
return; return;
} }
}; }
// //
// Listeners // Listeners
@@ -210,7 +210,7 @@ class SignalRConnector extends Component {
isDisconnected: false, isDisconnected: false,
isRestarting: false isRestarting: false
}); });
}; }
onStart = () => { onStart = () => {
console.debug('[signalR] connected'); console.debug('[signalR] connected');
@@ -221,11 +221,11 @@ class SignalRConnector extends Component {
isDisconnected: false, isDisconnected: false,
isRestarting: false isRestarting: false
}); });
}; }
onReconnecting = () => { onReconnecting = () => {
this.props.dispatchSetAppValue({ isReconnecting: true }); this.props.dispatchSetAppValue({ isReconnecting: true });
}; }
onReconnected = () => { onReconnected = () => {
@@ -247,17 +247,17 @@ class SignalRConnector extends Component {
dispatchFetchIndexers(); dispatchFetchIndexers();
dispatchFetchCommands(); dispatchFetchCommands();
repopulatePage(); repopulatePage();
}; }
onClose = () => { onClose = () => {
console.debug('[signalR] connection closed'); console.debug('[signalR] connection closed');
}; }
onReceiveMessage = (message) => { onReceiveMessage = (message) => {
console.debug('[signalR] received', message.name, message.body); console.debug('[signalR] received', message.name, message.body);
this.handleMessage(message); this.handleMessage(message);
}; }
// //
// Render // Render
@@ -38,7 +38,7 @@ class TableSelectCell extends Component {
} = this.props; } = this.props;
onSelectedChange({ id, value, shiftKey }); onSelectedChange({ id, value, shiftKey });
}; }
// //
// Render // Render
@@ -35,7 +35,7 @@ class VirtualTableSelectCell extends Component {
} = this.props; } = this.props;
onSelectedChange({ id, value, shiftKey }); onSelectedChange({ id, value, shiftKey });
}; }
// //
// Render // Render
@@ -21,7 +21,7 @@ class TableHeaderCell extends Component {
} else { } else {
this.props.onSortPress(name); this.props.onSortPress(name);
} }
}; }
// //
// Render // Render
@@ -62,7 +62,7 @@ class TableOptionsModal extends Component {
pageSize: value, pageSize: value,
pageSizeError pageSizeError
}); });
}; }
onVisibleChange = ({ name, value }) => { onVisibleChange = ({ name, value }) => {
const columns = _.cloneDeep(this.props.columns); const columns = _.cloneDeep(this.props.columns);
@@ -71,7 +71,7 @@ class TableOptionsModal extends Component {
column.isVisible = value; column.isVisible = value;
this.props.onTableOptionChange({ columns }); this.props.onTableOptionChange({ columns });
}; }
onColumnDragMove = (dragIndex, dropIndex) => { onColumnDragMove = (dragIndex, dropIndex) => {
if (this.state.dragIndex !== dragIndex || this.state.dropIndex !== dropIndex) { if (this.state.dragIndex !== dragIndex || this.state.dropIndex !== dropIndex) {
@@ -80,7 +80,7 @@ class TableOptionsModal extends Component {
dropIndex dropIndex
}); });
} }
}; }
onColumnDragEnd = ({ id }, didDrop) => { onColumnDragEnd = ({ id }, didDrop) => {
const { const {
@@ -100,7 +100,7 @@ class TableOptionsModal extends Component {
dragIndex: null, dragIndex: null,
dropIndex: null dropIndex: null
}); });
}; }
// //
// Render // Render
@@ -20,11 +20,11 @@ class TableOptionsModalWrapper extends Component {
onTableOptionsPress = () => { onTableOptionsPress = () => {
this.setState({ isTableOptionsModalOpen: true }); this.setState({ isTableOptionsModalOpen: true });
}; }
onTableOptionsModalClose = () => { onTableOptionsModalClose = () => {
this.setState({ isTableOptionsModalOpen: false }); this.setState({ isTableOptionsModalOpen: false });
}; }
// //
// Render // Render
+3 -3
View File
@@ -26,16 +26,16 @@ class TablePager extends Component {
onOpenPageSelectClick = () => { onOpenPageSelectClick = () => {
this.setState({ isShowingPageSelect: true }); this.setState({ isShowingPageSelect: true });
}; }
onPageSelect = ({ value: page }) => { onPageSelect = ({ value: page }) => {
this.setState({ isShowingPageSelect: false }); this.setState({ isShowingPageSelect: false });
this.props.onPageSelect(parseInt(page)); this.props.onPageSelect(parseInt(page));
}; }
onPageSelectBlur = () => { onPageSelectBlur = () => {
this.setState({ isShowingPageSelect: false }); this.setState({ isShowingPageSelect: false });
}; }
// //
// Render // Render
@@ -75,7 +75,7 @@ class VirtualTable extends Component {
setGridRef = (ref) => { setGridRef = (ref) => {
this._grid = ref; this._grid = ref;
}; }
// //
// Listeners // Listeners
@@ -84,7 +84,7 @@ class VirtualTable extends Component {
this.setState({ this.setState({
width width
}); });
}; }
// //
// Render // Render
@@ -38,7 +38,7 @@ class VirtualTableHeaderCell extends Component {
} else { } else {
this.props.onSortPress(name); this.props.onSortPress(name);
} }
}; }
// //
// Render // Render
+5 -5
View File
@@ -80,20 +80,20 @@ class Tooltip extends Component {
} }
return data; return data;
}; }
// //
// Listeners // Listeners
onMeasure = ({ width }) => { onMeasure = ({ width }) => {
this.setState({ width }); this.setState({ width });
}; }
onClick = () => { onClick = () => {
if (isMobileUtil()) { if (isMobileUtil()) {
this.setState({ isOpen: !this.state.isOpen }); this.setState({ isOpen: !this.state.isOpen });
} }
}; }
onMouseEnter = () => { onMouseEnter = () => {
if (this._closeTimeout) { if (this._closeTimeout) {
@@ -101,13 +101,13 @@ class Tooltip extends Component {
} }
this.setState({ isOpen: true }); this.setState({ isOpen: true });
}; }
onMouseLeave = () => { onMouseLeave = () => {
this._closeTimeout = setTimeout(() => { this._closeTimeout = setTimeout(() => {
this.setState({ isOpen: false }); this.setState({ isOpen: false });
}, 100); }, 100);
}; }
// //
// Render // Render
+4 -4
View File
@@ -64,12 +64,12 @@ function keyboardShortcuts(WrappedComponent) {
bindShortcut = (key, callback, options = {}) => { bindShortcut = (key, callback, options = {}) => {
this._mousetrap.bind(key, callback); this._mousetrap.bind(key, callback);
this._mousetrapBindings[key] = options; this._mousetrapBindings[key] = options;
}; }
unbindShortcut = (key) => { unbindShortcut = (key) => {
delete this._mousetrapBindings[key]; delete this._mousetrapBindings[key];
this._mousetrap.unbind(key); this._mousetrap.unbind(key);
}; }
unbindAllShortcuts = () => { unbindAllShortcuts = () => {
const keys = Object.keys(this._mousetrapBindings); const keys = Object.keys(this._mousetrapBindings);
@@ -83,7 +83,7 @@ function keyboardShortcuts(WrappedComponent) {
}); });
this._mousetrapBindings = {}; this._mousetrapBindings = {};
}; }
stopCallback = (event, element, combo) => { stopCallback = (event, element, combo) => {
const binding = this._mousetrapBindings[combo]; const binding = this._mousetrapBindings[combo];
@@ -98,7 +98,7 @@ function keyboardShortcuts(WrappedComponent) {
element.tagName === 'TEXTAREA' || element.tagName === 'TEXTAREA' ||
(element.contentEditable && element.contentEditable === 'true') (element.contentEditable && element.contentEditable === 'true')
); );
}; }
// //
// Render // Render
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Some files were not shown because too many files have changed in this diff Show More