diff options
author | GeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com> | 2023-03-02 21:28:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-02 20:28:53 +0000 |
commit | 00201de46c05a90646b072a7c3dbcf1d4c591ba6 (patch) | |
tree | a41f2cd79c9bc5bfc3e4c0e079ba97c4206cfb55 /src-vue/src/components | |
parent | dd0aaaa0d7e2e173c8cd4110e8d5237c9b0c914a (diff) | |
download | FlightCore-00201de46c05a90646b072a7c3dbcf1d4c591ba6.tar.gz FlightCore-00201de46c05a90646b072a7c3dbcf1d4c591ba6.zip |
feat: Allow installing PRs from DeveloperView (#139)
* feat: Initial backend code to get list of PRs
Hardcoded for launcher right now
* refactor: Autogen TS bindings from Rust code
using `ts-rs` as done in #140
* fix: Fix incorrect typing
What is returned is actually an array of `PullsApiResponseElement`
* feat: Prototyping frontend UI for installing PR
* fix: Use right repo
Used Mods instead of Launcher
* feat: Enable installing launcher pull request
* refactor: Rename variables to indicate approp repo
NorthstarLauncher vs NorthstarMods
* style: Formatting fixes
* feat: Initial code for getting mods PRs
* feat: Add backend code for installing mods PRs
* feat: Add note about launching in notification
* fix: Remove commented out code
* refactor: Depduplicate code
* refactor: Remove unnecessary use of anyhow
* refactor: Use already existing function
for checking game path
* feat: Add comment about profile / batch file
* chore: Remove leftover print statements
* feat: Add clickable link for each PR
* refactor: Reduce duplicate code
* refactor: Rename enum
* fix: Use proper type
* fix: Remove leftover `console.log`s
* style: Revert accidental formatting change
* refactor: Remove second API call for mods PRs
* refactor: Rename variable
* refactor: Remove second API call for launcher PRs
* refactor: Move API URL string to `constants.rs`
So that all constants are in a single place
* fix: Restore lines deleted in merge
* style: Formatting fixes
* fix: Print line when done installing PR
* feat: Show notification for install start/done
Displays a notification that PR install has started and upon completion
replaces it with one saying that install has completed.
* fix: Remove left-over console log
* feat: "Install PR" UI (#197)
* refactor: export pull requests selector to dedicated component
* refactor: regroup launcher+mods collapses in one collapse component
* refactor: load pull requests when opening selector collapse item
* refactor: review progress loaders' style
* fix: don't fetch PRs if they've already been loaded
* feat: update collapse style
* refactor: remove fetch success notification
* refactor: both collapses can be opened at the same time
* fix: non-accordion collapse sends an object as event parameter
* fix: Iterate over multiple pages of GitHub CI API
This ensures we can still grab older artifacts.
Max page is capped at 10 as going too high will cause us to hit API rate
limits.
Also refined error message accordingly.
* refactor: Move stored PRs to submodule
as suggested in review
* refactor: Move getPullRequests to store submodule
I order to clean up PullRequestSelector.vue
Other functions will follow in separate commits.
Currently TypeScript compilation fails on undefined type of `state`
* fix: Properly define state type
* refactor: Move installLauncherPR to store submodule
* refactor: Move installModsPR to store submodule
---------
Co-authored-by: Rémy Raes <contact@remyraes.com>
Diffstat (limited to 'src-vue/src/components')
-rw-r--r-- | src-vue/src/components/PullRequestsSelector.vue | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src-vue/src/components/PullRequestsSelector.vue b/src-vue/src/components/PullRequestsSelector.vue new file mode 100644 index 00000000..58a355f4 --- /dev/null +++ b/src-vue/src/components/PullRequestsSelector.vue @@ -0,0 +1,103 @@ +<template> + <div> + <el-collapse @change="onChange"> + <el-collapse-item title="Launcher PRs" name="1"> + <p v-if="pull_requests_launcher.length === 0"> + <el-progress + :show-text="false" + :percentage="100" + status="warning" + :indeterminate="true" + :duration="1" + style="margin: 15px" + /> + </p> + <el-card v-else shadow="hover" v-for="pull_request in pull_requests_launcher" + v-bind:key="pull_request.url"> + <el-button type="primary" @click="installLauncherPR(pull_request)">Install</el-button> + <a target="_blank" :href="pull_request.html_url"> + {{ pull_request.number }}: {{ pull_request.title }} + </a> + </el-card> + </el-collapse-item> + + <el-collapse-item title="Mods PRs" name="2"> + <div style="margin: 15px"> + <el-alert title="Warning" type="warning" :closable="false" show-icon> + Mod PRs are installed into a separate profile. Make sure to launch via + 'r2ns-launch-mod-pr-version.bat' or via '-profile=R2Northstar-PR-test-managed-folder' to actually + run the PR version! + </el-alert> + </div> + <p v-if="pull_requests_mods.length === 0"> + <el-progress + :show-text="false" + :percentage="100" + status="warning" + :indeterminate="true" + :duration="1" + style="margin: 15px" + /> + </p> + <el-card v-else shadow="hover" v-for="pull_request in pull_requests_mods" v-bind:key="pull_request.url"> + <el-button type="primary" @click="installModsPR(pull_request)">Install</el-button> + <a target="_blank" :href="pull_request.html_url"> + {{ pull_request.number }}: {{ pull_request.title }} + </a> + </el-card> + </el-collapse-item> + </el-collapse> + </div> +</template> + +<script lang="ts"> +import { defineComponent } from 'vue' +import { PullRequestType } from '../../../src-tauri/bindings/PullRequestType'; +import { PullsApiResponseElement } from '../../../src-tauri/bindings/PullsApiResponseElement'; +import { invoke } from "@tauri-apps/api"; +import { ElNotification } from "element-plus"; + +export default defineComponent({ + name: 'PullRequestsSelector', + computed: { + pull_requests_launcher(): PullsApiResponseElement[] { + return this.$store.state.pullrequests.pull_requests_launcher; + }, + pull_requests_mods(): PullsApiResponseElement[] { + return this.$store.state.pullrequests.pull_requests_mods; + }, + }, + methods: { + onChange(e: Object) { + const openedCollapseNames = Object.values(e); + if (openedCollapseNames.includes('1') && this.pull_requests_launcher.length === 0) { + this.getPullRequests('LAUNCHER'); + } + if (openedCollapseNames.includes('2') && this.pull_requests_mods.length === 0) { + this.getPullRequests('MODS'); + } + }, + async getPullRequests(pull_request_type: PullRequestType) { + this.$store.commit('getPullRequests', pull_request_type); + }, + async installLauncherPR(pull_request: PullsApiResponseElement) { + this.$store.commit('installLauncherPR', pull_request); + }, + async installModsPR(pull_request: PullsApiResponseElement) { + this.$store.commit('installModsPR', pull_request); + }, + } +}) +</script> + +<style scoped> +.el-collapse { + border-radius: var(--el-border-radius-base); + overflow: hidden; +} + +:deep(.el-collapse-item__header) { + padding-left: 10px; + font-size: 14px; +} +</style> |